有效返回 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中文网其他相关文章!