使用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表数据:

image-20210520141955768

执行如下语句:

SELECT item_no,item_name FROM test GROUP BY item_no,item_name

结果如下图所示,

image-20210520142122488

很明显,结果对原表进行了排序,但是我们本身是没有加order by 语句的,所以可以得出,group by 语句将会对结果进行排序,如上语句,相当于如下sql:

SELECT item_no,item_name FROM test GROUP BY item_no,item_name ORDER BY item_no,item_name

其执行结果如下:

image-20210520142411959

优化

但是有时,当数据量非常庞大,并且group by 的字段又非索引字段,对于结果集,又没有排序的需求,那么 此时的自动排序功能,将影响到sql的性能,所以我们需要使用 order by null 来解决,强制解除排序

使用explain关键字,对优化前后的语句进行解析,如下两图

优化前:

image-20210520143020575

优化后

image-20210520143150152

对于优化前,有一个非常消耗性能的操作,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 异常分析解决

order by 和 group by 的区别?

Mysql5.7中子查询时order by与group by合用无效的解决办法