使用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 后的分組有多條,則默認取第一條),所以如果去除排序,可能導致數據不一致,需權衡!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM