私はint型でbtreeインデックスを持つカラムcを持つテーブルtを持っています。PostgreSQL:この単純なクエリでインデックスが使用されないのはなぜですか?
次のクエリでこのインデックスが使用されないのはなぜですか?
explain select c from t group by c;
私が得る結果は次のとおりです。
HashAggregate (cost=1005817.55..1005817.71 rows=16 width=4)
-> Seq Scan on t (cost=0.00..946059.84 rows=23903084 width=4)
インデックスの私の理解は限られているが、私は、このようなクエリはインデックスの目的と思っていました。
インデックスを使用しないとどのような状況で報われないのでしょうか?私は、この例のサイズについて話しているときには、少なくともディストリビューションを想像することはできません。 – David
@David:全インデックススキャンは、テーブルの順次スキャンよりもはるかに高価です。インデックスは通常、テーブルの小さなサブセットを選択した場合にのみ有効です。 –
これは間違っています。 'SELECT DISTINCT x FROM t;'のようなクエリは '(x)'にインデックスを使うことができます。索引全体を読むことは、表全体を読むことよりも安価でなければなりません。しかし、Postgresは私が知っている限りでは実装していません。[Loose Indexスキャン](https://wiki.postgresql.org/wiki/Loose_indexscan) –