我在表 ref_class 上创建了一个索引:
CREATE INDEX ref_class_recl_iid_rcl_ivaleur_idx
ON ref_class (rcl_iid,rcl_ivaleur);
当我执行选择以检索 rcl_iid 和 rcl_ivaleur 时,我希望优化器将使用上面的索引进行仅索引扫描。但是,它使用顺序扫描。 选择查询如下:
select rcl_ivaleur from ref_class where rcl_iid = 1;
Postgres 使用的执行计划如下:
Seq Scan on ref_class (cost=0.00..7.47 rows=1 width=4) (actual time=0.036..0.036 rows=0 loops=1)
Planning Time: 0.093 ms
Execution Time: 0.048 ms
Rows Removed by Filter: 278
Output: rcl_ivaleur
Filter: (ref_class.rcl_iid = 1)
Buffers: shared hit=4
我错过了什么吗?
答案 0 :(得分:0)
在优化器下面运行查询后选择了仅索引扫描:
VACUUM ANALYZE ref_class;
答案 1 :(得分:0)
它是一个复合索引,因此您需要按照您在 create index 语句中创建的字段 (rcl_iid,rcl_ivaleur)
的相同顺序使用 where 子句中的两个字段。只有它才会使用索引扫描。