日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL 8.0开始Group by不再排序

發(fā)布時間:2025/3/15 数据库 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL 8.0开始Group by不再排序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

如題所示,mysql 8.0 開始 group by 默認(rèn)是沒有排序的
那mysql 8.0 之前和 8.0 就有可能結(jié)果出現(xiàn)不同 需要警惕
查看版本信息?

root@mysql3306.sock>[employees]>show variables like '%version%';
+-------------------------+------------------------------+
| Variable_name ? ? ? ? ? | Value ? ? ? ? ? ? ? ? ? ? ? ?|
+-------------------------+------------------------------+
| innodb_version ? ? ? ? ?| 5.7.14 ? ? ? ? ? ? ? ? ? ? ? |
| protocol_version ? ? ? ?| 10 ? ? ? ? ? ? ? ? ? ? ? ? ? |
| slave_type_conversions ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
| tls_version ? ? ? ? ? ? | TLSv1,TLSv1.1 ? ? ? ? ? ? ? ?|
| version ? ? ? ? ? ? ? ? | 5.7.14-log ? ? ? ? ? ? ? ? ? |
| version_comment ? ? ? ? | MySQL Community Server (GPL) |
| version_compile_machine | x86_64 ? ? ? ? ? ? ? ? ? ? ? |
| version_compile_os ? ? ?| linux-glibc2.5 ? ? ? ? ? ? ? |
+-------------------------+------------------------------+


1234567891011121314151617
運(yùn)行如下SQL
表信息?

root@mysql3306.sock>[employees]>select * from t_group ;
+--------+---------+------------+------------+
| emp_no | dept_no | from_date ?| to_date ? ?|
+--------+---------+------------+------------+
| ?22744 | d006 ? ?| 1986-12-01 | 9999-01-01 |
| ?24007 | d005 ? ?| 1986-12-01 | 9999-01-01 |
| ?30970 | d005 ? ?| 1986-12-01 | 2017-03-29 |
| ?31112 | d002 ? ?| 1986-12-01 | 1993-12-10 |
| ?40983 | d005 ? ?| 1986-12-01 | 9999-01-01 |
| ?49554 | d008 ? ?| 1986-12-01 | 1992-05-27 |
| ?48317 | d008 ? ?| 1986-12-01 | 1989-01-11 |
| ?49667 | d007 ? ?| 1986-12-01 | 9999-01-01 |
| ?50449 | d005 ? ?| 1986-12-01 | 9999-01-01 |
| ?10004 | d004 ? ?| 1986-12-01 | 9999-01-01 |
+--------+---------+------------+------------+
10 rows in set (0.00 sec)

查看執(zhí)行 計(jì)劃 ?發(fā)現(xiàn)extra 部分含有 usisng fiesort?

root@mysql3306.sock>[employees]>desc select dept_no ,count(*) from t_group group by dept_no ;
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+---------------------------------+
| id | select_type | table ? | partitions | type | possible_keys | key ?| key_len | ref ?| rows | filtered | Extra ? ? ? ? ? ? ? ? ? ? ? ? ? |
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+---------------------------------+
| ?1 | SIMPLE ? ? ?| t_group | NULL ? ? ? | ALL ?| NULL ? ? ? ? ?| NULL | NULL ? ?| NULL | ? 10 | ? 100.00 | Using temporary; Using filesort |
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+---------------------------------+
1 row in set, 1 warning (0.00 sec)

運(yùn)行結(jié)果 是按照 dept_no 排序 輸出?

root@mysql3306.sock>[employees]>select dept_no ,count(*) from t_group group by dept_no ;
+---------+----------+
| dept_no | count(*) |
+---------+----------+
| d002 ? ?| ? ? ? ?1 |
| d004 ? ?| ? ? ? ?1 |
| d005 ? ?| ? ? ? ?4 |
| d006 ? ?| ? ? ? ?1 |
| d007 ? ?| ? ? ? ?1 |
| d008 ? ?| ? ? ? ?2 |
+---------+----------+
6 rows in set (0.00 sec)


123456789101112131415161718192021222324252627282930313233343536373839404142434445
下面是8.0 版本
root@mysql3308.sock>[test]>show variables like '%version%';
+-------------------------+------------------------------+
| Variable_name ? ? ? ? ? | Value ? ? ? ? ? ? ? ? ? ? ? ?|
+-------------------------+------------------------------+
| innodb_version ? ? ? ? ?| 8.0.13 ? ? ? ? ? ? ? ? ? ? ? |
| protocol_version ? ? ? ?| 10 ? ? ? ? ? ? ? ? ? ? ? ? ? |
| slave_type_conversions ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
| tls_version ? ? ? ? ? ? | TLSv1,TLSv1.1,TLSv1.2 ? ? ? ?|
| version ? ? ? ? ? ? ? ? | 8.0.13 ? ? ? ? ? ? ? ? ? ? ? |
| version_comment ? ? ? ? | MySQL Community Server - GPL |
| version_compile_machine | x86_64 ? ? ? ? ? ? ? ? ? ? ? |
| version_compile_os ? ? ?| linux-glibc2.12 ? ? ? ? ? ? ?|
| version_compile_zlib ? ?| 1.2.11 ? ? ? ? ? ? ? ? ? ? ? |
+-------------------------+------------------------------+


root@mysql3308.sock>[test]>select * from t_group ;
+--------+---------+------------+------------+
| emp_no | dept_no | from_date ?| to_date ? ?|
+--------+---------+------------+------------+
| ?22744 | d006 ? ?| 1986-12-01 | 9999-01-01 |
| ?24007 | d005 ? ?| 1986-12-01 | 9999-01-01 |
| ?30970 | d005 ? ?| 1986-12-01 | 2017-03-29 |
| ?31112 | d002 ? ?| 1986-12-01 | 1993-12-10 |
| ?40983 | d005 ? ?| 1986-12-01 | 9999-01-01 |
| ?49554 | d008 ? ?| 1986-12-01 | 1992-05-27 |
| ?48317 | d008 ? ?| 1986-12-01 | 1989-01-11 |
| ?49667 | d007 ? ?| 1986-12-01 | 9999-01-01 |
| ?50449 | d005 ? ?| 1986-12-01 | 9999-01-01 |
| ?10004 | d004 ? ?| 1986-12-01 | 9999-01-01 |
+--------+---------+------------+------------+

1234567891011121314151617181920212223242526272829303132
運(yùn)行相同的sql
執(zhí)行 計(jì)劃 ?可以看出 extra 部分 已經(jīng)沒有 using filesort?

root@mysql3308.sock>[test]>desc select dept_no ,count(*) from t_group group by dept_no ;
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-----------------+
| id | select_type | table ? | partitions | type | possible_keys | key ?| key_len | ref ?| rows | filtered | Extra ? ? ? ? ? |
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-----------------+
| ?1 | SIMPLE ? ? ?| t_group | NULL ? ? ? | ALL ?| NULL ? ? ? ? ?| NULL | NULL ? ?| NULL | ? 10 | ? 100.00 | Using temporary |
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-----------------+
1 row in set, 1 warning (0.00 sec)

執(zhí)行結(jié)果中 發(fā)現(xiàn) 不是按照 dept_no 排序 輸出的

root@mysql3308.sock>[test]>select dept_no ,count(*) from t_group group by dept_no ;
+---------+----------+
| dept_no | count(*) |
+---------+----------+
| d006 ? ?| ? ? ? ?1 |
| d005 ? ?| ? ? ? ?4 |
| d002 ? ?| ? ? ? ?1 |
| d008 ? ?| ? ? ? ?2 |
| d007 ? ?| ? ? ? ?1 |
| d004 ? ?| ? ? ? ?1 |
+---------+----------+
6 rows in set (0.00 sec)

12345678910111213141516171819202122232425
如果這種情況下 進(jìn)行分頁
5.7 版本
root@mysql3306.sock>[employees]>select dept_no ,count(*) from t_group group by dept_no ?limit 1;
+---------+----------+
| dept_no | count(*) |
+---------+----------+
| d002 ? ?| ? ? ? ?1 |
+---------+----------+
1 row in set (0.00 sec)
1234567
8.0版本
root@mysql3308.sock>[test]>select dept_no ,count(*) from t_group group by dept_no ?limit 1;
+---------+----------+
| dept_no | count(*) |
+---------+----------+
| d006 ? ?| ? ? ? ?1 |
+---------+----------+
1 row in set (0.00 sec)
1234567
可以發(fā)現(xiàn) 兩個結(jié)果是 不一樣的 ?,原因就是8.0之前是group by ?包含using filesort
而 8.0開始是 沒有的
為了避免這種問題,8.0開始 除了索引替換排序的優(yōu)化思路之外的相關(guān)排序我們必須使用order by來進(jìn)行
5.7
root@mysql3306.sock>[employees]>select dept_no ,count(*) from t_group group by dept_no order by dept_no limit 1;
+---------+----------+
| dept_no | count(*) |
+---------+----------+
| d002 ? ?| ? ? ? ?1 |
+---------+----------+
1 row in set (0.00 sec)

8.0
root@mysql3308.sock>[test]>select dept_no ,count(*) from t_group group by dept_no order by dept_no limit 1;
+---------+----------+
| dept_no | count(*) |
+---------+----------+
| d002 ? ?| ? ? ? ?1 |
+---------+----------+
1 row in set (0.00 sec)
1234567891011121314151617
我是知數(shù)堂SQL 優(yōu)化班老師~ ^^
---------------------?
作者:騎龜?shù)耐米?018?
來源:CSDN?
原文:https://blog.csdn.net/qidan3500/article/details/84563296?
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!

總結(jié)

以上是生活随笔為你收集整理的MySQL 8.0开始Group by不再排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。