我应该在值有限的列上使用索引吗?

时间:2015-03-09 11:17:47

标签: mysql optimization indexing

阅读this我现在知道何时使用索引以及何时不使用索引。但我有一个问题;在具有有限数量的可能值的列上使用索引有助于加速查询(SELECT-ing)?请考虑以下事项:

Table "companies": id, district_id, name
Table "districts": id, name

地区数量永远不会超过5个条目。我应该在companies.district_id上使用索引吗?我在某个地方阅读(无法找到链接:()它不会有帮助,因为值不是很多,在很多情况下它实际上会减慢查询速度。

PS:两张桌子都是MyISAM

1 个答案:

答案 0 :(得分:3)

几乎从来就不是优化器使用的低基数列的INDEX。

另一方面,"复合指数" 可能有用。例如,INDEX(district_id, name)有用吗?

使用INDEX(district_id)会减慢INSERT,因为无论何时插入行都会添加索引。它不会减慢SELECT,除了优化程序注意索引并拒绝它的少量时间。

(我的陈述适用于MyISAM和InnoDB。)

对此答案的更多讨论: MySQL: Building the best INDEX for a given SELECT: Flags and Low Cardinality