mahemoff Asked: 2013-09-26 23:57:01 +0800 CST2013-09-26 23:57:01 +0800 CST 2013-09-26 23:57:01 +0800 CST 索引参考列 772 假设我有一个languages只有 20 条记录的参考表。是否值得为查询中经常使用的字段language_code(例如en, )编制索引?es我想知道一个高效的服务器是否会有效地自动索引这样的列。 这是专门针对带有 InnoDB 引擎的 MariaDB 的。 mysql innodb 2 个回答 Voted Best Answer Ohlin 2013-09-27T00:14:03+08:002013-09-27T00:14:03+08:00 在MySQL 支持页面上,他们写了一些关于索引优化的内容。(我认为 MariaDB 并没有偏离太多,因为它们有些相似。)他们在这里写道,索引在小表上并不那么重要。 对于报表查询处理大部分或所有行的小表或大表,索引不太重要。当查询需要访问大部分行时,顺序读取比通过索引读取更快。顺序读取最小化磁盘寻道,即使查询不需要所有行。 在关于如何避免全表扫描的页面上,他们将限制定义为“多于几行”。 对于包含多行的表,考虑通过为 WHERE 子句中测试的一个或多个列添加索引来重新设计查询。 我个人会添加一个索引,因为我总是将索引添加到所有表的键中。就您而言,我不知道该索引是否会做出如此大的贡献。 Anup Shah 2013-09-28T11:45:35+08:002013-09-28T11:45:35+08:00 在如此小的表上增加索引不会有帮助,值得写入开销。尽管我见过非常复杂的查询,它有很多小表,如果查询没有以正确的方式编写,优化器就无法提出好的执行计划,并且查询会花费意外的执行时间。大多数时候数据库引擎不应该有这样的问题,但如果你遇到这样的事情,那么开始看看是否有效地编写了查询。
在MySQL 支持页面上,他们写了一些关于索引优化的内容。(我认为 MariaDB 并没有偏离太多,因为它们有些相似。)他们在这里写道,索引在小表上并不那么重要。
在关于如何避免全表扫描的页面上,他们将限制定义为“多于几行”。
我个人会添加一个索引,因为我总是将索引添加到所有表的键中。就您而言,我不知道该索引是否会做出如此大的贡献。
在如此小的表上增加索引不会有帮助,值得写入开销。尽管我见过非常复杂的查询,它有很多小表,如果查询没有以正确的方式编写,优化器就无法提出好的执行计划,并且查询会花费意外的执行时间。大多数时候数据库引擎不应该有这样的问题,但如果你遇到这样的事情,那么开始看看是否有效地编写了查询。