鉴于一个表每月添加约500万条记录,这个简单的查询从第一次执行到第二次执行的运行时间差异很大:
select count(*) from my_table where recorded_at > '2018-01-24 23:59:59'
字段recorded_at
上有一个索引。
CREATE INDEX my_table__recorded_at ON my_table(recorded_at);
执行时间的这种差异是否表明索引没有正确更新?
其他日期也一样:
select count(*) from my_table where recorded_at > '2018-02-07 23:59:59'
这是在带有r4.xlarge实例的AWS Aurora postgres上运行
答案 0 :(得分:1)
索引在每个DML之后都是最新的。
你可以使用
EXPLAIN (analyze, verbose, buffers)
select count(*) from my_table where recorded_at > '2018-01-24 23:59:59'
获取有关缓存命中,I / O时序的更多信息。
如果您认为您的索引已损坏,还有REINDEX
(https://www.postgresql.org/docs/current/static/sql-reindex.html)命令。
可能pg_prewarm
模块(https://www.postgresql.org/docs/current/static/pgprewarm.html)会很有趣。