我有这个表:
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数据库块)。
始终使用实际的数据量进行测试。这会使你以后不那么痛苦的。