我应该在值数量有限的列上使用索引吗?
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
阅读 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