web-dev-qa-db-ja.com

Postgresは100以上の値を持つIN句でインデックスをバイパスしますか?

私はこれに遭遇しました 別のフォーラムで

PGのINクエリの値には100の制限があり、その後はその列のインデックスは使用されません。例:INリストが100を超えると、PKの一般的なSELECT ... WHERE IN (...)クエリが全表スキャンに変わります。

これについては何も見つかりませんでした。 PGにはそのような制限がありますか(私はそう思います)、ある場合、制限は何ですか?

一時テーブルで大きな副選択を使用するほうが適切な場合があることは知っていますが、カットオフがどこにあるかを知っておくと役立ちます。

1
Jason

クエリプランナーのhard-wired制限については知りません。そして簡単なテストはそれを証明しますwrong-IN構成の両方のバリアントについて、 setlistを取るもの:

db <> fiddle ここ

103要素のインデックススキャンを参照してください。

関連:

関連制限があります:VARIADIC関数は最大100の個人を受け取りますパラメーター。さらに、配列を渡す必要があります...

一時テーブルが定期的にパフォーマンスを向上させる唯一のケースは、続行する前に中間結果に有用なインデックスを作成する場合です。そうでない場合、一時テーブルは通常(かなり)遅くなります。

4