ANALYZE | ANALYSE
功能描述
用于收集与数据库中普通表内容相关的统计信息,统计结果存储在系统表PG_STATISTIC下。执行计划生成器会使用这些统计数据,以确定最有效的执行计划。
如果没有指定参数,ANALYZE会分析当前数据库中的每个表和分区表。同时也可以通过指定table_name、column和partition_name参数把分析限定在特定的表、列或分区表中。
注意事项
ANALYZE非临时表不能在一个匿名块、事务块、函数或存储过程内被执行。支持存储过程中ANALYZE临时表,不支持统计信息回滚操作。
语法格式
- 收集表的统计信息。
{ ANALYZE | ANALYSE } [ VERBOSE ] [ table_name [ ( column_name [, ...] ) ] ];- 收集分区表的统计信息。
{ ANALYZE | ANALYSE } [ VERBOSE ] [ table_name [ ( column_name [, ...] ) ] ] PARTITION ( patrition_name ) ;说明:
普通分区表目前支持针对某个分区的统计信息的语法,但功能上不支持针对某个分区的统计信息收集。
- 收集外表的统计信息。
{ ANALYZE | ANALYSE } [ VERBOSE ] { foreign_table_name | FOREIGN TABLES };- 收集多列统计信息
{ANALYZE | ANALYSE} [ VERBOSE ] table_name (( column_1_name, column_2_name [, ...] ));说明:
- 收集多列统计信息时,请设置GUC参数default_statistics_target为负数,以使用百分比采样方式。
- 每组多列统计信息最多支持32列。
- 不支持收集多列统计信息的表:系统表、HDFS外表复制表。
- 在逻辑集群模式下,只有管理员用户可以对数据库中所有表执行analyze,关联逻辑集群的用户只会对逻辑集群范围的表收集统计信息。
参数说明
- VERBOSE
启用显示进度信息。
说明:
如果指定了VERBOSE,ANALYZE发出进度信息,表明目前正在处理的表。各种有关表的统计信息也会打印出来。
- table_name
需要分析的特定表的表名(可能会带模式名),如果省略,将对数据库中的所有表(非外部表)进行分析。
对于ANALYZE收集统计信息,目前仅支持行存表、列存表、HDFS表、orc格式的OBS外表、协同分析的外表。
取值范围:已有的表名。
- column_name,column_1_name,column_2_name
需要分析特定列的列名,默认为所有列。
取值范围:已有的列名。
- partition_name
如果table为分区表,在关键字PARTITION后面指定分区名partition_name表示分析该分区表的统计信息。目前语法上支持分区表做ANALYZE,但功能实现上暂不支持对指定分区统计信息的分析。
取值范围:表的某一个分区名。
- foreign_table_name
需要分析的特定表的表名(可能会带模式名),该表的数据存放于HDFS分布式文件系统中。
取值范围:已有的表名。
- FOREIGN TABLES
分析所有当前用户权限下,数据位于HDFS分布式文件系统中的HDFS外表。
示例
--- 创建表。
1 2 3 4 5 6 7 8
postgres=# CREATE TABLE customer_info ( WR_RETURNED_DATE_SK INTEGER , WR_RETURNED_TIME_SK INTEGER , WR_ITEM_SK INTEGER NOT NULL, WR_REFUNDED_CUSTOMER_SK INTEGER ) DISTRIBUTE BY HASH (WR_ITEM_SK);
--- 创建分区表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
postgres=# CREATE TABLE customer_par ( WR_RETURNED_DATE_SK INTEGER , WR_RETURNED_TIME_SK INTEGER , WR_ITEM_SK INTEGER NOT NULL, WR_REFUNDED_CUSTOMER_SK INTEGER ) DISTRIBUTE BY HASH (WR_ITEM_SK) PARTITION BY RANGE(WR_RETURNED_DATE_SK) ( PARTITION P1 VALUES LESS THAN(2452275), PARTITION P2 VALUES LESS THAN(2452640), PARTITION P3 VALUES LESS THAN(2453000), PARTITION P4 VALUES LESS THAN(MAXVALUE) ) ENABLE ROW MOVEMENT;
--- 使用ANALYZE语句更新统计信息。
1
postgres=# ANALYZE customer;
--- 使用ANALYZE VERBOSE语句更新统计信息,并输出表的相关信息。
1 2 3 4 5
postgres=# ANALYZE VERBOSE customer_info; INFO: analyzing "cstore.pg_delta_3394584009"(cn_5002 pid=53078) INFO: analyzing "public.customer_info"(cn_5002 pid=53078) INFO: analyzing "public.customer_info" inheritance tree(cn_5002 pid=53078) ANALYZE
说明:
若环境若有故障,需查看CN的log。
--- 删除表。
1 2 3
postgres=# DROP TABLE customer; postgres=# DROP TABLE customer_par;
查看更多:华为GaussDB 200 SQL语法
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」关注作者【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。评论
- 收集外表的统计信息。
- 收集分区表的统计信息。




