合 PG ANALYZE语法
有关VACUUM请参考:https://www.dbaup.com/pg-vacuummingling.html
参考: http://postgres.cn/docs/13/sql-analyze.html
ANALYZE
ANALYZE — 收集有关一个数据库的统计信息
大纲
1 2 3 4 5 6 7 8 9 10 11 | ANALYZE [ ( option [, ...] ) ] [ table_and_columns [, ...] ] ANALYZE [ VERBOSE ] [ table_and_columns [, ...] ] 其中option可以是: VERBOSE [ boolean ] SKIP_LOCKED [ boolean ] table_and_columns是: table_name [ ( column_name [, ...] ) ] |
描述
ANALYZE
收集一个数据库中的表的内容的统计信息,并且将结果存储在pg_statistic
系统目录中。接下来,查询规划器会使用这些统计信息来帮助确定查询最有效的执行计划。
如果没有table_and_columns
列表,则ANALYZE
处理当前用户有权分析的当前数据库中的每个表和物化视图。使用列表,ANALYZE
仅处理那些表。还可以给出表的列名列表,在这种情况下,仅收集这些列的统计信息。
当选项列表用括号括起来时,选项可以按任何顺序来写。 带括号的语法是在PostgreSQL 11中添加的;不带括号的语法已弃用。
参数
VERBOSE
允许显示进度消息。
SKIP_LOCKED
规定
ANALYZE
在开始处理一个关系时不应等待任何冲突的锁被释放:如果关系不能无需等待立即锁定,则跳过该关系。 请注意即使采用此选项,ANALYZE
在打开关系的索引或从分区、表继承子级和某些类型的外表获取样本行时仍可能阻塞。 此外,当ANALYZE
通常处理指定分区表的所有分区时,如果分区表上有一个冲突的锁,这个选项将导致ANALYZE
跳过所有分区表。boolean
规定所选的选项打开或关闭。 您可以写
TRUE
、ON
或1
以启用该选项,或者是FALSE
、OFF
或0
来禁用它。boolean
值可以被省略,在假定为TRUE
的情况下。table_name
要分析的一个指定表的名称(可以是模式限定的)。如果省略,则分析当前数据库中的所有常规表、分区表和物化视图(但不包含外部表)。 如果指定的表是分区表,则整个分区表的继承统计信息和各个分区的统计信息都将更新。
column_name
要分析的一个指定列的名称。默认是所有列。
输出
当指定了VERBOSE
时,ANALYZE
会发出进度消息来指示当前正在处理哪个表。还会打印有关那些表的多种统计信息。
注解
要分析表,通常必须是该表的所有者或超级用户。不过,数据库所有者可以分析数据库中的所有表,共享目录除外。 (对共享目录的限制意味着真正的数据库范围的ANALYZE
只能由超级用户执行。) ANALYZE
将跳过调用用户没有分析权限的任何表。
只有被显式选中时才会分析外部表。并非所有外部数据包装器都支持ANALYZE
。如果表的包装器不支持ANALYZE
,该命令会打印一个警告并且什么也不做。
在默认的PostgreSQL配置中,自动清理守护进程(见第 24.1.6 节)会在表第一次载入数据或者用常规操作改变时负责表的自动分析。当启用自动清理时,定期运行ANALYZE
是个好主意,或者可以在表内容做了大的修改后运行ANALYZE
。准确的统计信息将帮助规划器选择最合适的查询计划,从而提升查询处理的速度。主读数据库的一般策略是在一天中使用量最低时运行一次VACUUM和ANALYZE
(如果有大量的更新动作则是不够的)。
ANALYZE
只要求目标表上的一个读锁,因此它可以和表上的其他动作并行。
查看