PostgreSQL SELECT DISTINCT
效能瓶頸:案例研究
本文研究了在包含約 200 萬筆記錄的 PostgreSQL 表上執行 SELECT DISTINCT
查詢時遇到的效能問題。
上下文
tickers
表格儲存來自 Coinbase Pro 的「股票行情」通道的資料。 複合主鍵包含 product_id
欄位。
效能問題
由於 SELECT DISTINCT product_id FROM tickers
上的索引,查詢 product_id
預計會表現良好。 然而,執行始終需要 500-600 毫秒。
查詢計畫調查
EXPLAIN ANALYZE
顯示查詢規劃器預設為順序掃描,忽略 product_id
索引。 強制使用索引並沒有解決效能問題。
索引最佳化嘗試
在 product_id
上建立專用索引僅產生了微小的改進,除非明確覆蓋,否則計劃者仍然首選順序掃描。
有效的解決方案:索引跳過掃描模擬
實現的解決方案使用具有橫向連接的遞歸查詢來模擬索引跳過掃描。這種方法顯著提高了效能,即使對於 225 萬行的資料集,執行時間也縮短至 0.75 毫秒。
總結
PostgreSQL 目前缺乏本機索引跳過掃描功能的問題可以透過這種模擬技術解決。 此方法有效地利用了現有索引,並避免了大型表上SELECT DISTINCT
查詢的順序掃描的效能損失。
以上是為什麼我的 PostgreSQL `SELECT DISTINCT` 這麼慢,我該如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!