优化 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中文网其他相关文章!