如何高效地获取MySQL Group By查询中每个组的最后一行?

Patricia Arquette
发布: 2024-11-14 18:44:02
原创
211 人浏览过

How to Efficiently Fetch the Last Row for Each Group in MySQL Group By Queries?

优化 MySQL Group By 查询中的最后一行获取

在 MySQL 中,检索分组数据集中每组的最后一行需要有效的方法。一种常见的策略是相关子查询方法:

select * 
from foo as a
where a.id = (select max(id) from foo where uid = a.uid group by uid)
group by uid;
登录后复制

虽然此方法有效,但计算成本可能很高。更有效的替代方法是使用带有子查询的联接,如以下查询所示:

SELECT t1.* FROM foo t1
JOIN (SELECT uid, MAX(id) id FROM foo GROUP BY uid) t2
ON t1.id = t2.id AND t1.uid = t2.uid;
登录后复制

此方法通过预先计算子查询中每个组的最大 ID 来优化性能。通过加入这个预先计算的值,查询可以有效地检索每个组的最后一行。

此外,在两个查询上使用 EXPLAIN 将为执行计划和资源消耗提供有价值的见解,从而允许进一步优化。另一种替代方法是使用 LEFT JOIN 方法:

SELECT t1.* FROM foo t1
LEFT JOIN foo t2
ON t1.id < t2.id AND t1.uid = t2.uid
WHERE t2.id is NULL;
登录后复制

此查询通过左连接后续行并过滤掉具有非空 ID 值的行来标识每个组的最后一行。最终,优化方法的选择取决于应用程序的具体数据和性能要求。

以上是如何高效地获取MySQL Group By查询中每个组的最后一行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板