首頁  >  文章  >  資料庫  >  MySQL如何有效率地傳回每組的最後一行?

MySQL如何有效率地傳回每組的最後一行?

DDD
DDD原創
2024-11-11 20:29:02627瀏覽

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