Dav*_*vid 9 database postgresql relational-database database-performance
我有一个带有列c的表t,它是一个int并且在其上有一个btree索引.
为什么以下查询不使用此索引?
explain select c from t group by c;
Run Code Online (Sandbox Code Playgroud)
我得到的结果是:
HashAggregate (cost=1005817.55..1005817.71 rows=16 width=4)
-> Seq Scan on t (cost=0.00..946059.84 rows=23903084 width=4)
Run Code Online (Sandbox Code Playgroud)
我对索引的理解是有限的,但我认为这些查询是索引的目的.
可以使用称为松散索引扫描的优化来执行此查询.但PostgreSQL尚未实现此优化,因此它使用表扫描.
在主要的数据库中,据我所知,只有MySQL实现了松散的索引扫描(也许也是Oracle?).PostgreSQL 尚未实现此功能.
查询当然可以使用索引。不在您的特定情况下的原因取决于数据的特定大小和分布。可以SET enable_seqscan TO off
用来调查。