私のテーブルには整数列「a」、「b」があります。"a" の異なる値はわずか (<30) ですが、各 "a" には膨大な数の異なる "b" が存在します (>10**7)。スピードアップするために、複合インデックス (a,b) を作成しました。私はそれを観察します
select count(*) from tab where a=1;
速く走る
select count(*) from tab where a=2;
速く走るが、
select count(*) from tab where a=1 or a=2;
実行が (なんてこった) 遅く、同じことが次の場合にも当てはまります
select count(*) from tab;
説明を実行すると、高速クエリが使用することが説明されます
-> Index Only Scan using idx on tab
ただし、遅いクエリの場合は、シーケンシャル スキャンが使用されます。
これはなぜですか?Postgresql が後の 2 つのクエリに同じインデックスを使用しないのはなぜですか? クエリ プランナーの不完全性だけですか、それともインデックス オンリー スキャンを使用できないより深刻な理由がありますか?