使用Order By NULL 解决 group by后自动排序,优化Sql性能

对于 Group by 后的结果,Mysql搜索引擎会将结果按照Group by 的字段按照升序,自动排序,例如:

test表数据:

使用Order By NULL 解决 group by后自动排序,优化Sql性能

执行如下语句:

SELECT item_no,item_name FROM test GROUP BY item_no,item_name

结果如下图所示,

使用Order By NULL 解决 group by后自动排序,优化Sql性能

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

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

其执行结果如下:

使用Order By NULL 解决 group by后自动排序,优化Sql性能

优化

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

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

优化前:

使用Order By NULL 解决 group by后自动排序,优化Sql性能

优化后

使用Order By NULL 解决 group by后自动排序,优化Sql性能

对于优化前,有一个非常消耗性能的操作,Using filesort,文件排序

问题

group by 后排序的原因是因为需要保证每次从各个分组中获取到的记录保持一致(如果每个group by 后的分组有多条,则默认取第一条),所以如果去除排序,可能导致数据不一致,需权衡!!

相关文章:

  • 2022-12-23
  • 2021-06-26
  • 2021-10-10
  • 2021-08-15
  • 2021-09-09
  • 2021-08-29
  • 2022-12-23
猜你喜欢
  • 2021-05-05
  • 2021-07-10
  • 2021-04-26
  • 2021-06-19
相关资源
相似解决方案