阅读 this我现在明白什么时候使用索引,什么时候不使用它们。但我有一个问题;在具有有限数量的可能值的列上使用索引是否有助于加速查询(SELECT-ing)?请考虑以下事项:
Table "companies": id, district_id, name
Table "districts": id, name
区数永远不会超过 5 个条目。我是否应该在 companies.district_id 上使用索引?我在某处读到(找不到链接 :( ) 它不会有帮助,因为值不是那么多,而且在很多情况下它实际上会减慢查询速度。
PS:两个表都是MyISAM
最佳答案
几乎从不在优化器使用的低基数列上使用索引。
另一方面,“复合索引”可能很有用。例如,INDEX(district_id, name)
有什么用吗?
INDEX(district_id)
会减慢 INSERT 的速度,因为每当插入一行时都会添加索引。它不会减慢 SELECT,除了优化器注意到索引并拒绝它的少量时间。
(我的陈述适用于 MyISAM 和 InnoDB。)
关于这个答案的更多讨论: MySQL: Building the best INDEX for a given SELECT: Flags and Low Cardinality
关于mysql - 我应该在值数量有限的列上使用索引吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28940690/