【发布时间】:2011-09-19 18:09:35
【问题描述】:
请参阅下面的查询。我应该在表上创建什么索引,以便查询将使用索引并避免使用临时和文件排序?我尝试了许多不同的索引组合并阅读了advice here,但我似乎无法弄清楚。我的解释要么是 Using Where(无索引),要么是 Using Where Using Temporary, Using Filesort
这是一个简化的查询。所有列都是整数。
SELECT c1, Sum(c2)
FROM table
WHERE c3 IS NOT NULL
AND c4 = 2011
AND c5 = 0
AND c6 In (6,9,11)
GROUP BY c1
【问题讨论】:
-
请记住,MySQL 每个表只能使用一个索引,因此如果您在列上放置索引以优化 GROUP BY,您可能最终会伤害自己,因为 WHERE 子句未优化最终还需要做更多的工作(即全表扫描)。
-
我明白了,但是有没有办法创建一个可以同时被 GROUP BY 和 WHERE 子句使用的索引?