最佳化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中文網其他相關文章!