跳到主要内容

ANALYZE

描述

该语句用于收集表或表分区的统计信息。

语法

ANALYZE TABLE table_name UPDATE HISTOGRAM ON column_name_list WITH INT_NUM BUCKETS;

当配置项 enable_sql_extensionTRUE 的时候,可以使用如下语法:

ANALYZE TABLE table_name [use_partition] COMPUTE STATISTICS [ for_clause ];

use_partition:
PARTITION (parition_name [,partition_name,....])
| SUBPARTITION(subpartition_name, [,subpartition_name,...])

analyze_statistics_clause:
COMPUTE STATISTICS [analyze_for_clause]
| ESTIMATE STATISTICS [analyze_for_clause] [SAMPLE INTNUM {ROWS | PERCENTAGE}]

analyze_for_clause:
FOR TABLE
| FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]
| FOR COLUMNS [size clause] column [size_clause] [,column [size_clause]...]

size_clause:
SIZE integer
| SIZE REPEAT
| SIZE AUTO
| SIZE SKEWONLY

column:
column_name
| (column_name [, column_name])

参数解释

参数描述
table_name指定要分析的表。
INT_NUM整数,即 Buckets 的个数。有关 Buckets 的取值,请参见 method_opt
use_partition指定分区名,如果指定为表名,则不收集分区统计信息。
compute_statistics_clause指定 COMPUTE STATISTICS 可以计算分析对象的精确统计信息,并将其存储在数据字典中。分析表时,会同时统计表和列的统计信息。
for_clause指定要分析整个表,或者只分析特定的列。
  • FOR TABLE:指定仅收集表的统计信息。
  • FOR COLUMNS:指定仅收集指定列和标量对象属性列的统计信息。其中,attribute 指定对象中的特定列名。
  • FOR ALL COLUMNS:指定收集所有列和标量对象属性列的统计信息。
  • FOR ALL INDEXED COLUMNS:指定收集所有索引列的列统计信息。列统计信息可以基于完整的列,也可以通过指定 SIZE 使用直方图。
  • FOR ALL HIDDEN COLUMNS:指定收集所有隐藏列的列统计信息。列统计信息可以基于完整的列,也可以通过指定 SIZE 使用直方图。
  • SIZE:指定直方图中的最大存储桶数。取值范围是 [1,2048],默认值是 256
estimate_statistics_clause指定 ESTIMATE STATISTICS 可以估计分析对象的统计信息,并将其存储在数据字典中。
SAMPLE指定用于估计统计信息使用的分析对象中的采样数据量。如果省略该参数,则会根据数据库优化器自动选择一个合适的比例进行采样。
  • ROWS:对表中的 integer 行进行采样。
  • PERCENT:对表中行的 integer 百分比进行采样。

示例

  • 收集 test 表的统计信息,列的桶个数为 30 个。
CREATE TABLE test (c1 NUMBER(30) PRIMARY KEY,c2 VARCHAR(50));
Query OK, 0 rows affected (0.001 sec)

ANALYZE TABLE test UPDATE HISTOGRAM ON c1,c2 with 30 buckets;
Query OK, 0 rows affected (0.001 sec)
  • 当配置项 enable_sql_extensionTRUE 的时候,使用以下语法收集用户 user01 的表 test 的统计信息,所有列的桶个数设定为 128。
ALTER SYSTEM SET enable_sql_extension = TRUE;
Query OK, 0 rows affected (0.001 sec)

ANALYZE TABLE test COMPUTE STATISTICS FOR ALL COLUMNS SIZE 128;
Query OK, 0 rows affected (0.001 sec)