MySQL 不同版本下的group by

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版本

原文地址:https://www.cnblogs.com/hld123/p/15752688.html