Nicolas Payart Asked: 2018-01-06 03:15:44 +0800 CST2018-01-06 03:15:44 +0800 CST 2018-01-06 03:15:44 +0800 CST 刷新物化视图后需要分析吗? 772 我们是否应该在运行ANALYZE myview;PostgreSQL 9.6+ 物化视图后运行REFRESH MATERIALIZED VIEW CONCURRENTLY myview;? 还是没用(也许索引统计信息已经在刷新时更新了?) postgresql statistics 1 个回答 Voted Best Answer Erwin Brandstetter 2018-01-06T04:20:17+08:002018-01-06T04:20:17+08:00 表统计信息不会自动更新。 CONCURRENTLY如果使用该选项刷新,它们将保持不变。 如果没有CONCURRENTLY,则会为该表写入一个新文件,并且系统目录中的基本计数relpages和因此将重置为. 不过,表中的统计信息(每列)仍然保持不变。reltuplespg_class0pg_statistic 我在 Postgres 9.6 中进行了快速测试以确认。 在某些情况下(查询计划不太依赖于当前统计数据),您可能希望节省时间并且根本不运行ANALYZE。在所有其他情况下,您需要/需要ANALYZE myview;在REFRESH. 或者您等到 autovacuum 启动,这仅在更改了足够多的行时才会发生(CONCURRENTLY实际上在 MV 上运行 DML 命令以仅影响更改的行。)
表统计信息不会自动更新。
CONCURRENTLY
如果使用该选项刷新,它们将保持不变。如果没有
CONCURRENTLY
,则会为该表写入一个新文件,并且系统目录中的基本计数relpages
和因此将重置为. 不过,表中的统计信息(每列)仍然保持不变。reltuples
pg_class
0
pg_statistic
我在 Postgres 9.6 中进行了快速测试以确认。
在某些情况下(查询计划不太依赖于当前统计数据),您可能希望节省时间并且根本不运行
ANALYZE
。在所有其他情况下,您需要/需要ANALYZE myview;
在REFRESH
. 或者您等到 autovacuum 启动,这仅在更改了足够多的行时才会发生(CONCURRENTLY
实际上在 MV 上运行 DML 命令以仅影响更改的行。)