最近我将主键从整数迁移到 bigint 并发现了一个 article其中作者更新PK数据类型后手动更新表统计信息:
-- reanalyze the table in 3 steps
SET default_statistics_target TO 1;
ANALYZE [table];
SET default_statistics_target TO 10;
ANALYZE [table];
SET default_statistics_target TO DEFAULT;
ANALYZE [table];
据我了解,分析器会自动在后台运行以保持统计数据最新。在 Postgres docs (注释部分)我发现分析器可以在一些重大更改后手动运行。
所以问题是:
- 如果启用了 autovacuum,手动运行分析器是否有意义?如果是,在什么情况下?
- 它的最佳实践是什么(例如上面的
default_statistics_target
切换)?
最佳答案
自动分析由数据修改触发:它通常在表的 10% 发生更改时运行(使用 INSERT
、UPDATE
或 DELETE
) .如果您重写表或创建表达式索引,则不会触发自动分析。在这些情况下,运行手动 ANALYZE
是个好主意。
不要为围绕 default_statistics_target
的舞蹈而烦恼。一个简单的单个 ANALYZE 选项卡;
就可以解决问题。
关于database - 什么时候需要手动重新分析 PostgreSQL 中的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73545924/