Skip to content

ANALYZE_TABLE

接口/方法功能

分析表字段基础信息,及时收集表中指定列的统计信息,帮助优化查询工作。

说明:

虚谷数据库 V12.7版本引入了基于压缩直方图(Compressed Histogram)的统计功能,能够显著提升查询优化器的选择率估算精度。通过开启直方图统计,系统会自动生成最常见值(MCV,Most Common Values)列表和直方图列表,帮助优化器更好地理解数据分布,即使在数据分布不均匀的情况下也能提供更准确的选择率估算。

接口/方法声明

PROCEDURE ANALYZE_TABLE (
    TABLE_NAME     VARCHAR,
    FIELD_NAME     VARCHAR,
    SAMPLE_RATE    INTEGER,
    HISTOGRAM_NUM  INTEGER,
    AUTO_ADJUST    BOOL DEFAULT TRUE,
    PARALLEL       INTEGER DEFAULT 1
);

参数说明

参数名称参数类型参数解释默认值取值范围
TABLE_NAMEVARCHAR表名称
FIELD_NAMEVARCHAR字段名称ALL COLUMNS
ALL INDEX COLUMNS
列名
SAMPLE_RATEINTEGER采样间隔[1,100]
HSITOGRAM_NUMINTEGER直方图条目数[0,256]
AUTO_ADJUSTBOOL是否自动调整采样间隔TRUETRUE\FALSE
PARALLELINTEGER并行度,提高分析效率1[1,8]

说明:

  • 采样间隔的大小可能直接影响统计信息结果准确性。1表示全采样,结果最准确,但耗时最长。允许自动调整采样间隔,可以根据缓冲区大小和记录数动态调整采样间隔,避免耗时过长。
    当记录数小于10万,建议值为1;记录数小于20万,建议值为2;记录数小于400万,建议值为4
  • 并非开启直方图统计就会生成最常见值列表和直方图列表。最终是否生成及条目数量还与离散度、非空率等因素有关,确保生成的最常见值和直方图统计结果有意义。
    在直方图统计中,当采样数据总数大于等于300*N时才会进行,否则将忽略此次统计行为(查看trace日志)。直方图条目值设置越大,直方图越详细,但同时也要求采样更多的数据。
  • 并行度用于提高表分析的效率。由于较高的并行度设置会消耗更多的资源,因此并行度的设置通常针对大表。对于大表,通常并行度设置为4时,可以在内存消耗与分析效率间取得较均衡的效果。

操作示例

sql
SQL> CREATE TABLE T_ANA(c1 INT,c2 CHAR(10),c3 int);

SQL> BEGIN
FOR i IN 1..100 LOOP
INSERT INTO t_ana VALUES(i,'TEST'||i,i*2);
END LOOP;
END;
/

对表T_ANA中所有列进行统计分析,其中采样间隔设置为1,关闭直方图统计(NULL或者0),允许自动调整采样间隔,并行度设置为1。

sql
SQL> EXEC DBMS_STAT.ANALYZE_TABLE('SYSDBA.T_ANA','ALL COLUMNS',1,NULL,TRUE,1);

对表T_ANA中所有索引列进行统计分析,其中采样间隔设置为1,直方图条目数为50,允许自动调整采样间隔,并行度设置为2。

sql
SQL> EXEC DBMS_STAT.ANALYZE_TABLE('SYSDBA.T_ANA','ALL INDEX COLUMNS',1,50,TRUE,2);

对表T_ANA中C1、C2列进行统计分析,其中采样间隔设置为8,直方图条目数为100,不允许自动调整采样间隔,并行度设置为4。

sql
SQL> EXEC DBMS_STAT.ANALYZE_TABLE('SYSDBA.T_ANA','C1,C2',8,100,FALSE,4);

对表T_ANA中C1列进行统计分析,其中采样间隔设置为16,直方图条目数为200,不允许自动调整采样间隔,并行度设置为8。

sql
SQL> EXEC DBMS_STAT.ANALYZE_TABLE('SYSDBA.T_ANA','C1',16,200,FALSE,8);