刷新物化视图后需要分析吗?

Nic*_*art 9 postgresql statistics materialized-view

运行后ANALYZE myview;,我们是否应该在 PostgreSQL 9.6+ 物化视图上运行REFRESH MATERIALIZED VIEW CONCURRENTLY myview;

或者它没有用(也许索引统计信息已经在刷新时更新了?)

Erw*_*ter 11

表统计信息不会自动更新。

  • 如果使用该CONCURRENTLY选项刷新,它们将保持不变。

  • 如果没有CONCURRENTLY,则会为表写入一个新文件,并且系统目录中的基本计数relpages和因此重置为。但是,表统计信息(每列)仍然保持不变。reltuplespg_class0pg_statistic

我在 Postgres 9.6 中运行了一个快速测试来确认。

在某些情况下(查询计划不太依赖于当前统计数据)您可能希望节省时间并且根本不运行ANALYZE。在所有其他情况下,您需要/需要ANALYZE myview;REFRESH. 或者您等到 autovacuum 启动,只有在更改了足够多的行时才会发生这种情况(CONCURRENTLY实际上在 MV 上运行 DML 命令以仅影响更改的行。)