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

Should i use an index on a column with limited number of values?

阅读 this 我现在明白什么时候使用索引,什么时候不使用索引了。但我有一个问题;在具有有限数量的可能值的列上使用索引是否有助于加速查询(SELECT-ing)?考虑以下因素:

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

区数绝不会超过5个条目。我是否应该在 companies.district_id 上使用索引?我在某处读到(找不到 link :( ) 它不会有帮助,因为值不是那么多,而且在很多情况下它实际上会减慢查询速度。

PS: 两个表都是MyISAM

几乎从不在优化器使用的低基数列上使用索引。

另一方面,"compound 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