Postgresql
Postgres繞過帶有100多個值的IN子句的索引?
我在另一個論壇上遇到了這個:
PG 對查詢中的值的限制為 100,
IN
之後不使用所述列上的索引。例如:SELECT ... WHERE IN (...)
如果IN列表超過100,PK上的典型查詢將變成全表掃描。我無法找到任何關於此的資訊。PG是否有這樣的限制(我想是的),如果有,限制是多少?
我知道有時在臨時表中使用較大的子選擇會更好,但是了解截止點的位置會很有幫助。
我不知道查詢計劃器中有任何硬連線限制。快速測試證明它是錯誤的 - 對於
IN
構造的兩種變體,一個採用set和一個採用list:db<>在這裡擺弄
看到103 個元素的索引掃描了嗎?
有關的:
有一個相關的限制:一個
VARIADIC
函式最多需要 100 個單獨的參數。除此之外,還需要傳遞一個數組…臨時表定期提高性能的唯一情況是在繼續之前在中間結果上創建有用的索引。否則,臨時表通常(非常)慢。