zoukankan      html  css  js  c++  java
  • 使用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,文件排序

    问题

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

  • 相关阅读:
    java基础之final
    java基础之finally(转)
    java 中 == 与 equals 的区别
    转载:日志分析
    eclipse配置Git
    Gitlab使用笔记:新建工程
    hadoop,spark的启动及DataNode无法启动的解决方法
    HTTP Status 500
    springmvc4.0配置ajax请求json格式数据
    jq load()方法中加载文件中元素事件绑定失效的问题
  • 原文地址:https://www.cnblogs.com/xjwhaha/p/14789764.html
Copyright © 2011-2022 走看看