Postgres TIMESTAMP索引和查询性能



我有这个表:

CREATE TABLE IF NOT EXISTS CHANGE_REQUESTS (
ID             UUID PRIMARY KEY,
FIELD_ID             INTEGER NOT NULL,
LAST_CHANGE_DATE    TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
);

我总是会对它运行相同的查询:

select * from change_requests where last_change_date > now() - INTERVAL '10 min';

表的大小平均在750k到100万行之间。

我的问题是如何确保查询总是非常快?我正在考虑在last_change_date上添加一个索引,但我不确定这是否会有任何作用。我试过了(现在表中只有1行),得到了这个解释:

create index change_requests__dt_index
on change_requests (last_change_date);
Seq Scan on change_requests  (cost=0.00..1.02 rows=1 width=28)
Filter: (last_change_date > (now() - '00:10:00'::interval))

所以它看起来根本没有使用索引

这个索引真的有用吗?如果不行,我还能做什么呢?谢谢!

您的索引非常适合此任务。您可以在执行计划中看到顺序扫描,因为表中没有实际数量的测试数据,并且对于非常小的表,使用索引的开销是不值得的(您必须处理更多的8kB数据库块)。

始终使用实际的数据量进行测试。这会使你以后不那么痛苦的。

最新更新