MySQL 不同版本下的group by
阿新 • • 發佈:2021-12-31
MySQL 不同版本下的group by
大家有沒有遇到過這樣的坑,在測試站的sql執行得好好的,到線上就不行了。這裡就來記錄下我在使用mysqll分組查詢所遇到的坑。
1、group by
Group by 語句用於結合聚合函式(如count,sum,avg,max,min),根據一個或多個列對結果集進行分組。
1)去掉重複值:根據group by後面的關鍵字只顯示一行結果;
2)mysql5.7預設開啟引數ONLY_FULL_GROUP_BY,表示完全group by,即select後面跟的列group by後面也必須有,但是group by後面跟的列,select後面不一定需要出現
3)mysql5.7group by 預設還有排序功能,8.0預設只分組不排序,需要加order by才排序,這點可以從執行結果是否有Using filesort來判斷
2. mysql8.0新特性
1)group by 不再隱式排序
mysql 8.0 對於group by 欄位不再隱式排序,如需要排序,必須顯式加上order by 子句。
好處:在使用GROUP BY 這樣的語句,在沒有特殊優化的情況下,MYSQL 8 不在使用 FILESORT 排序後,速度有了大幅度的提升,這說明在沒有優化的情況下,MYSQL 8 對於排序和GROUP BY 這樣的查詢時有利的,並且隨著提取的資料越多,則越快,這對 開發者來說是一個好訊息。
測試站使用的是mysql5.7版本,線上使用的mysql8.0版本