我有一个 mysql_query 。我想知道要索引哪一个。
SELECT count(*) FROM foo WHERE c=5 GROUP BY d
也许是 (c,d) 或者只是 c?
我还有一个类似的。
SELECT count(*) FROM foo WHERE d=6 GROUP BY b
也许 (d,b) 或者只是 d?
这里还有一个:
SELECT a FROM foo WHERE b=5 GROUP BY c
这里(a,b,c)?
我的观点只是建立一个涵盖三个查询的索引。这里最好的一个是?在哪一栏?
最佳答案
不可能用一个索引来涵盖所有用例。
MySQL 可以受益于在 order by/group by 列上建立索引。避免执行文件排序和临时表操作。我的建议是:
1) (c,d)
2) (d,b)
3) 对于最后一个 (a,b,c) 将不可用,因为它以 a 开头(列顺序很重要)。正确的索引是 (b,c,a)。
一点解释:
MySQL 执行以下操作:
- 过滤结果(需要b)
- 如果有按列排序的索引,则按顺序获取它或对其进行排序(需要c)(分组依据相同)
- 返回选择部分中的列(需要一个)
另一件非常重要的事情是索引的选择性。例如,如果您有一个 50% true、50% false 的 bool 值,MySQL 将不会使用该索引,因为扫描整个表比遍历索引树更容易。
关于mysql - mysql 中的索引列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21779839/