首頁 >資料庫 >mysql教程 >如何最佳化查詢以有效地找到分組最大值?

如何最佳化查詢以有效地找到分組最大值?

Linda Hamilton
Linda Hamilton原創
2024-12-26 10:51:10571瀏覽

How Can I Optimize a Query to Efficiently Find the Groupwise Maximum?

針對高效分組最大值的優化查詢

原始問題:

查詢

select * 
from records 
where id in ( select max(id) from records group by option_id )

對整個記錄表執行順序掃描以決定每個option_id 的最大ID。這種方法效率低下,尤其是對於大型表。

解決方案:橫向聯結

一種解決方案是利用橫向聯接來獲取子查詢中每個option_id 的最大ID:

select r.*
from records r
cross join lateral (
    select max(id) as max_id
    from records
    where option_id = r.option_id
) m
where r.id = m.max_id

此查詢使用橫向聯接來計算單獨子查詢中的最大ID。結果與原始記錄表連接,僅過濾具有最大 ID 的行。

建立專用索引

另一個最佳化是在記錄表上建立專用索引,用於儲存每個option_id 的最大ID:

CREATE INDEX idx_max_id ON records (option_id, max(id))

此索引可以直接找出給定option_id 的最大ID,從而無需原始索引子查詢:

select * 
from records r
where (option_id, id) in (
    select option_id, max(id) from records group by option_id
)

基於索引的方式顯著減少了表的訪問次數,使得對於大表的查詢更加高效。

以上是如何最佳化查詢以有效地找到分組最大值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn