首页  >  文章  >  数据库  >  MySQL如何高效返回每组的最后一行?

MySQL如何高效返回每组的最后一行?

DDD
DDD原创
2024-11-11 20:29:02626浏览

How to Efficiently Return the Last Row of Each Group in MySQL?

有效返回 MySQL 中每个组的最后一行

返回 MySQL 中每个组的最后一行对于数据操作来说通常是必要的。提示中提供的查询:

select * 
    from foo as a
    where a.id = (select max(id) from foo where uid = a.uid group by uid)
    group by uid;

通过执行嵌套查询来查找每个唯一 UID 的最大 ID,然后仅选择具有匹配 ID 的行来实现此目的。

更高效的方法

但是,可以使用更高效的查询来消除嵌套查询:

SELECT t1.* 
FROM foo t1
JOIN (
    SELECT uid, MAX(id) AS max_id 
    FROM foo 
    GROUP BY uid
) t2 ON t1.id = t2.max_id;

该查询使用 JOIN 操作直接匹配最大值每个UID的ID,与嵌套查询方法相比,提供了更高的性能。

其他优化注意事项

为了进一步优化,可以使用EXPLAIN来分析查询计划和识别任何潜在的瓶颈。此外,UID 列上的索引可以显着提高查询性能。

替代方法

另一个选项是使用 LAG() 函数:

SELECT t1.* 
FROM foo t1
LEFT JOIN foo t2
ON t1.id < t2.id AND t1.uid = t2.uid
WHERE t2.id is NULL;

此查询使用 LAG() 函数来识别组中的下一行。如果没有后续行(即当前行是其组中的最后一行),则查询将返回当前行。虽然这种方法可能很有效,但它可能并不总是像上面讨论的基于 JOIN 的查询那样高效。

以上是MySQL如何高效返回每组的最后一行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn