我一次又一次地注意到,当我EXPLAIN
用一个GROUP BY
子句查询时,我得到filesort
了一个额外的条件。很久以前,我读过一个建议GROUP BY NULL
在这些情况下使用以避免文件排序,它确实消除了这种令人讨厌的filesort
情况。
我认为,如果不存在ORDER BY
子句,则 dbms 只会呈现任意顺序或任何最有效的顺序,而不是按需要文件排序的某些神秘列进行排序。对我来说似乎很奇怪,我需要包含一个额外的方向,基本上相当于说“不要做任何愚蠢的事情”。
我的问题是为什么这甚至是必要的并且ORDER BY NULL
实际上增加了性能?
MySQL 5.7 参考手册 / ... / SELECT 语法
Using filesort
当用于分组的列没有适当的索引时出现。如上所述,返回的结果GROUP BY
按相同的列排序。如果您filesort
进行排序,则还可以使用文件排序进行分组。以同样的方式侮辱表现。因此,您必须创建索引,而不是抑制排序。没有。
filesort
_ORDER BY NULL
附言
至于小提琴失败这里是
mysql
输出:没有多列索引:
添加了多列索引: