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

标签 mysql optimization indexing

阅读 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/

相关文章:

arrays - 从 Google 表格中的数组中提取特定字段

python - 为什么在两个键的查询中单个索引比复合索引更快? (MongoDB,多键)

python - 在python中查找列表的唯一元素的索引?

mysql - 连接列中有空格的表

php - 如何在单个 mysql_query 中检查 2 个变量

php - 如何订购产品最多的类别

mysql - 选择 * 和查询优化器

java - spring boot 基于环境变量的自动配置

java - JIT可以做这个字段访问优化吗?

java - for循环优化