因为有你,山河无恙。向英雄致敬,逝者安息! -- 清明全国哀悼

mysql5.7和mysql5.5对group by 取最新数据的不同处理方式

Server 林涛 985℃ 0评论

mysql 用 group by 查询时,会自动保留   对应组 ‘最先搜索出来的数据’,但这时数据可能不是最新的

如何才能获取‘最新数据’ 呢,这需要根据mysql的版本来“区别对待”

原因:在mysql5.7中,如果不加limit,系统会把order by优化掉。

在mysql5.7手册的8.2.2.1中有解释:

子查询的优化是使用半连接的策略完成的(The optimizer uses semi-join strategies to improve subquery execution)

使用半连接进行优化,子查询语句必须满足一些标准(In MySQL, a subquery must satisfy these criteria to be handled as a semi-join)。

其中一个标准是:必须不是一个包含了limit和order by的语句(It must not have ORDER BY with LIMIT.)

对于mysql 5.5版本

select * from (

select * from table_name order by create_time desc

) as t
group by t.id;
EOT;

对于mysql 5.7版本,需要加入limit限制,否则不生效

select * from (

select * from table_name order by create_time desc limit 100000

) as t
group by t.id;
EOT;

 

如需转载请注明: 转载自26点的博客

本文链接地址: mysql5.7和mysql5.5对group by 取最新数据的不同处理方式

转载请注明:26点的博客 » mysql5.7和mysql5.5对group by 取最新数据的不同处理方式

喜欢 (1)
发表我的评论
取消评论

表情