文档首页 > > 开发指南> SQL参考> SQL语法> ANALYZE | ANALYSE

ANALYZE | ANALYSE

分享
更新时间: 2019/07/22 GMT+08:00

功能描述

用于收集与数据库中普通表内容相关的统计信息,统计结果存储在系统表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外表复制表。

参数说明

  • 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外表。

示例

--- 创建表。

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);

--- 创建分区表。

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语句更新统计信息。

postgres=# ANALYZE customer;

--- 使用ANALYZE VERBOSE语句更新统计信息,并输出表的相关信息。

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。

--- 删除表。

postgres=# DROP TABLE customer;
postgres=# DROP TABLE customer_par;
  

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区