首批通过分布式安全可靠测评,为关键业务系统打造
ANALYZE
更新时间:2026-07-29 10:39:51
描述
该语句用于收集表或表分区的统计信息。
语法
ANALYZE TABLE table_name [, table_name, ...]
ANALYZE TABLE table_name UPDATE HISTOGRAM ON column_name_list [WITH INT_NUM BUCKETS]
ANALYZE TABLE table_name DROP HISTOGRAM ON column_name_list
当租户级配置项 enable_sql_extension 为 TRUE 时,您可以使用 Oracle 模式下的语法,如下:
ANALYZE TABLE table_name [use_partition] analyze_statistics_clause
use_partition:
PARTITION (partition_name [, partition_name, ...])
analyze_statistics_clause:
COMPUTE STATISTICS [opt_analyze_for_clause]
| ESTIMATE STATISTICS [opt_analyze_for_clause] [opt_analyze_sample_clause]
opt_analyze_for_clause:
FOR TABLE
| for_all
| for_columns
for_all:
FOR ALL [INDEXED | HIDDEN] COLUMNS [opt_size_clause]
for_columns:
FOR COLUMNS [for_columns_list]
for_columns_list:
for_columns_item
| for_columns_list [,] for_columns_item
for_columns_item:
column_clause
| size_clause
| column_clause size_clause
column_clause:
column_name
| (column_name_list)
opt_size_clause:
/* empty */
| size_clause
size_clause:
SIZE AUTO
| SIZE REPEAT
| SIZE SKEWONLY
| SIZE number_literal
opt_analyze_sample_clause:
/* empty */
| SAMPLE INTNUM sample_option
sample_option:
ROWS
| PERCENTAGE
参数解释
| 参数 | 描述 |
|---|---|
| table_name | 指定要分析的表。可以指定多个表,用逗号分隔。支持跨数据库的表,格式为 database_name.table_name。 |
| column_name_list | 指定要更新或删除直方图的列名列表,多个列名用逗号分隔。 |
| INT_NUM | 整数,即 Buckets 的个数。取值范围是 [1,1024]。如果省略该参数,则使用默认值。有关 Buckets 的取值,请参见 method_opt。 |
| use_partition | 指定分区名,格式为 PARTITION (partition_name [, partition_name, ...])。如果指定分区名,则只收集指定分区的统计信息;如果指定为表名,则不收集分区统计信息。 |
| analyze_statistics_clause | 指定统计信息收集方式。
|
| opt_analyze_for_clause | 指定要分析整个表,或者只分析特定的列。该参数是可选的。
|
| for_all | 指定收集所有列的统计信息。
|
| for_columns | 指定收集指定列的统计信息。格式为 FOR COLUMNS [for_columns_list],其中 for_columns_list 可以是列名、大小子句或两者的组合,多个项目用逗号分隔。 |
| for_columns_item | 指定列统计信息项,可以是列名、大小子句或两者的组合。 |
| column_clause | 指定列名,可以是单个列名或括号括起来的列名列表。 |
| opt_size_clause | 可选的直方图大小子句。 |
| size_clause | 指定直方图中的最大存储桶数或大小选项。
|
| opt_analyze_sample_clause | 可选的采样子句,用于指定估计统计信息时的采样数据量。如果省略该参数,则会根据数据库优化器自动选择一个合适的比例进行采样。 |
| SAMPLE | 指定用于估计统计信息使用的分析对象中的采样数据量。格式为 SAMPLE INTNUM sample_option,其中 INTNUM 必须大于等于 1。 |
| sample_option | 指定采样方式。
|
示例
- 收集
test表的统计信息,列的桶个数为 30 个。
obclient> CREATE TABLE test (c1 INT, c2 INT, c3 INT);
obclient> ANALYZE TABLE test UPDATE HISTOGRAM ON c1, c2 WITH 30 BUCKETS;
- 删除指定列的直方图。
obclient> ANALYZE TABLE test DROP HISTOGRAM ON c1, c2;
- 当租户级配置项
enable_sql_extension为TRUE的时候,使用 Oracle 模式下的语法收集表test的统计信息,所有列的桶个数设定为 128。
obclient> ALTER SYSTEM SET enable_sql_extension = TRUE;
obclient> ANALYZE TABLE test COMPUTE STATISTICS FOR ALL COLUMNS SIZE 128;