我创建下表和索引:
CREATE TABLE test
(
id bigint,d timestamp without time zone
);
CREATE INDEX f_date4
ON public.test
USING btree
(date(d),id);
CREATE INDEX f_date5
ON public.test
USING btree
(id,date(d));
我用数据填充表格并使用以下查询:
SELECT id,date(d)
FROM test
WHERE date(d) > '2019-09-20'::date;
EXPLAIN
表明在条件d > '2019-09-20'::date
中使用了f_date4索引,但我无法获得INDEX ONLY SCAN
。可能的原因是什么,为什么会发生这种情况以及如何避免这种情况?
执行计划:
Index Scan using f_date4 on test (cost=0.06..0.07 rows=1 width=12) (actual time=0.005..0.005 rows=0 loops=1)
Index Cond: (date(d) > '2019-01-20'::date)
Buffers: shared hit=2
Planning time: 0.131 ms
Execution time: 0.025 ms
我使用PostgreSQL 10.6
谢谢!