首頁 > 資料庫 > mysql教程 > 如何有效率地取得MySQL Group By查詢中每個群組的最後一行?

如何有效率地取得MySQL Group By查詢中每個群組的最後一行?

Patricia Arquette
發布: 2024-11-14 18:44:02
原創
246 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板