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

Server 林涛 10613℃ 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 取最新数据的不同处理方式

喜欢 (2)or分享 (0)
0 0 投票数
文章评分
订阅评论
提醒
guest

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x