使用Order By NULL 解决 group by后自动排序,优化Sql性能
Posted 哈哈丶丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Order By NULL 解决 group by后自动排序,优化Sql性能相关的知识,希望对你有一定的参考价值。
使用Order By NULL 解决 group by后自动排序,优化Sql性能
对于 Group by
后的结果,mysql搜索引擎会将结果按照Group by
的字段按照升序,自动排序,例如:
test表数据:
执行如下语句:
SELECT item_no,item_name FROM test GROUP BY item_no,item_name
结果如下图所示,
很明显,结果对原表进行了排序,但是我们本身是没有加order by
语句的,所以可以得出,group by
语句将会对结果进行排序,如上语句,相当于如下sql:
SELECT item_no,item_name FROM test GROUP BY item_no,item_name ORDER BY item_no,item_name
其执行结果如下:
优化
但是有时,当数据量非常庞大,并且group by
的字段又非索引字段,对于结果集,又没有排序的需求,那么 此时的自动排序功能,将影响到sql的性能,所以我们需要使用 order by null
来解决,强制解除排序
使用explain关键字,对优化前后的语句进行解析,如下两图
优化前:
优化后
对于优化前,有一个非常消耗性能的操作,Using filesort
,文件排序
以上是关于使用Order By NULL 解决 group by后自动排序,优化Sql性能的主要内容,如果未能解决你的问题,请参考以下文章
2018-07-10聚合函数+比较条件+''和NULL+DISTINCT+ORDER BY+LIMIT+GROUP BY
在 Netezza 中使用 GROUP_CONCAT 时缺少 ORDER BY 的解决方法
ORDER BY clause is not in GROUP BY.this is incompatible with sql_mode=only_full_group_by 异常分析解决
ORDER BY clause is not in GROUP BY.this is incompatible with sql_mode=only_full_group_by 异常分析解决