检查postgres索引是否是最新的?

时间:2018-03-16 22:51:38

标签: postgresql performance indexing

鉴于一个表每月添加约500万条记录,这个简单的查询从第一次执行到第二次执行的运行时间差异很大:

select count(*) from my_table where recorded_at > '2018-01-24 23:59:59'
  • 首次执行:count = 8,756,237执行时间= ~5分钟
  • 二 执行:count = 8,756,237执行时间= ~3秒

字段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'
  • 首次执行:count = 6,487,274执行时间= ~4分钟
  • 第二次执行:count = 6,487,274执行时间= ~3秒

这是在带有r4.xlarge实例的AWS Aurora postgres上运行

1 个答案:

答案 0 :(得分:1)

索引在每个DML之后都是最新的。

你可以使用 EXPLAIN (analyze, verbose, buffers) select count(*) from my_table where recorded_at > '2018-01-24 23:59:59' 获取有关缓存命中,I / O时序的更多信息。

如果您认为您的索引已损坏,还有REINDEXhttps://www.postgresql.org/docs/current/static/sql-reindex.html)命令。

可能pg_prewarm模块(https://www.postgresql.org/docs/current/static/pgprewarm.html)会很有趣。