テーブルmy_table
とフィールドkind:string
があり、このフィールドにインデックスがあります。PostgresでOR条件を使用すると、クエリプランのインデックスがスキップされる
私はPostgresは、クエリのための2つの異なるクエリ・プランを構築することに気付きました:
SELECT * FROM my_table
WHERE kind = 'kind1' OR kind IS NULL;
と
SELECT * FROM my_table
WHERE kind = 'kind1';
秒1が行うのに対し、最初のものはインデックスを使用しません。どうして?
私はインデックスが使用されるかどうかについて多くの条件があることを知っており、クエリプランについて多くのことを読んだことがありますが、このケースは依然として私には分かりません。
実際に 'kind IN( 'kind1'、NULL)'は 'kind = 'kind1''に等しいです。 – Abelisto
@Abelisto、ばかげた質問、編集済み –