首頁 > 資料庫 > mysql教程 > 為什麼我的 PostgreSQL `SELECT DISTINCT` 這麼慢,我該如何修復它?

為什麼我的 PostgreSQL `SELECT DISTINCT` 這麼慢,我該如何修復它?

Linda Hamilton
發布: 2025-01-07 18:39:40
原創
954 人瀏覽過

Why is My PostgreSQL `SELECT DISTINCT` So Slow, and How Can I Fix It?

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板