pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
ANALYZE — 收集关于数据库的统计信息
ANALYZE [ VERBOSE ] [table[ (column[, ...] ) ] ]
启用进度消息的显示。
table要分析的一个指定表的名称(可以是模式限定的)。默认为当前 数据库中的所有表。
column要分析的一个指定列的名称。默认为所有列。
→ ANALYZE命令已完成。
ANALYZE收集PostgreSQL 表内容的统计信息,并把结果存储在系统表 pg_statistic中。随后,查询规划器使用这些统计 信息来帮助确定查询最有效的执行计划。
不带参数时,ANALYZE检查当前数据库中的每个表。 带参数时,ANALYZE只检查该表。还可以给出一个 列名列表,这种情况下只更新这些列的统计信息。
定期运行ANALYZE,或者在一个表的内容发生重大 变化之后紧接着运行它,是个好主意。准确的统计信息能帮助规划器 选择最合适的查询计划,从而提高查询处理的速度。常见的策略是 每天在使用率低的时段运行一次VACUUM 和ANALYZE。
与VACUUM FULL不同, ANALYZE只需要 对目标表的读锁,因此它可以与该表上的其他活动并行运行。
对于大型表,ANALYZE对表内容抽取随机样本, 而不是检查每一行。这使得即使非常大的表也能在很短时间内完成 分析。但要注意,统计信息只是近似的,即使表的实际内容没有 变化,每次运行ANALYZE的结果也会略有不同。 这可能导致EXPLAIN显示的规划器估计代价发生 小的变化。
收集的统计信息通常包括每个列中一些最常见值的列表,以及显示 每个列中近似数据分布的直方图。如果 ANALYZE认为它们没有意义(例如在唯一键列中 没有常见值),或者列数据类型不支持适当的操作符,则可以省略 其中之一或两者。关于统计信息的更多信息见 用户指南。
分析的深度可以通过调整 default_statistics_target参数变量来控制,也可以逐列地用 ALTER TABLE ALTER COLUMN SET STATISTICS设置每列的统计目标来控制(见 ALTER TABLE)。 目标值设定了最常见值列表中的最大条目数和直方图中的最大桶数。 默认的目标值是 10,可以调高或调低,以便在规划器估计的准确性 与ANALYZE所花费的时间以及 pg_statistic中占用的空间之间做出权衡。 特别地,把统计目标设置为零将禁用该列的统计信息收集。 对于从不用作查询的 WHERE、GROUP BY 或 ORDER BY 子句部分的列, 这样做可能有用,因为规划器不会用到这类列的统计信息。
被分析各列中最大的统计目标决定了为准备统计信息而采样的表行数。 提高目标会使执行ANALYZE所需的时间和空间 成比例地增加。
ANALYZE 在 SQL92 中没有语句。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。