我有一个查询,我通过比较五个月前的插入时间戳来过滤行。
该字段不会更新,如果有帮助,我们可能会认为它是不可变的。
CREATE TABLE events (
id serial PRIMARY KEY,
inserted_at timestamp without time zone DEFAULT now() NOT NULL
);
SELECT *
FROM events e
WHERE e.inserted_at >= (now() - '5 minutes'::interval);
并且EXPLAIN ANALYZE VERBOSE
:
Seq Scan on public.events e (cost=0.00..459.00 rows=57 width=12) (actual time=0.738..33.127 rows=56 loops=1)
Output: id, inserted_at
Filter: (e.inserted_at >= (now() - '5 minutes'::interval))
Rows Removed by Filter: 19944
Planning time: 0.156 ms
Execution time: 33.180 ms
似乎 PostgreSQL 在字段上执行序列扫描,这增加了成本。
我是否有机会创建 B-tree 部分索引或其他任何东西来优化该查询?