首頁  >  問答  >  主體

如何強制Postgres使用指定的索引?

<p>當Postgres堅持執行順序掃描時,我該如何強制它使用索引? </p>
P粉785905797P粉785905797426 天前622

全部回覆(1)我來回復

  • P粉281089485

    P粉2810894852023-08-21 18:52:40

    假設您詢問的是許多資料庫中常見的「索引提示」功能,PostgreSQL並沒有提供這樣的功能。這是PostgreSQL團隊做出的有意決定。關於為什麼以及您可以做什麼的很好的概述可以在這裡找到。基本原因是,這是一種效能最佳化的方法,在資料發生變化時往往會導致更多的問題,而PostgreSQL的優化器可以根據統計資料重新評估計劃。換句話說,今天可能是一個好的查詢計劃,但可能不會一直是一個好的查詢計劃,而索引提示則會強制使用特定的查詢計劃。

    作為一個非常粗糙的工具,用於測試,您可以使用enable_seqscanenable_indexscan參數。請參閱:

    這些不適用於持續的生產使用。如果您在查詢計劃選擇方面遇到問題,您應該查看用於追蹤查詢效能問題的文件。不要只是設定enable_參數然後離開。

    除非您有非常充分的理由使用索引,否則Postgres可能會做出正確的選擇。為什麼呢?

    • 對於小表來說,順序掃描更快。
    • 當資料類型不符時,Postgres不使用索引,您可能需要包含適當的轉換。
    • 您的計劃設定可能會導致問題。

    也請參閱這篇舊的新聞群組文章

    回覆
    0
  • 取消回覆