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_NAME | VARCHAR | 表名称 | 无 | 无 |
FIELD_NAME | VARCHAR | 字段名称 | 无 | ALL COLUMNS ALL INDEX COLUMNS 列名 |
SAMPLE_RATE | INTEGER | 采样间隔 | 无 | [1,100] |
HSITOGRAM_NUM | INTEGER | 直方图条目数 | 无 | [0,256] |
AUTO_ADJUST | BOOL | 是否自动调整采样间隔 | TRUE | TRUE\FALSE |
PARALLEL | INTEGER | 并行度,提高分析效率 | 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);