1、统计信息的作用
Oracle基于CBO的优化器在生成执行计划时,很大程度上依赖 于统计信息,你可以把CBO理解为一个复杂的数学模型,而统计信息是它最主要的输入,执行 计划是输出,如果输入都不准确,输出还可能准确吗?所有,统计信息是否及时有效对执行 计划的好坏有着关键的影响。
2、dbms_stats包
Oracle里采用dbms_stats包分 析统计信息(Analyze命令已过时,不建议使用),该包的使用方法,官方文档有详细说明 (http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_stats.htm#i1036461), 这里挑几个最常用的说说。
1) gather_table_stats
DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2 DEFAULT NULL, estimate_percent NUMBER DEFAULT NULL, block_sample BOOLEAN DEFAULT FALSE, method_opt VARCHAR2 DEFAULT 'FOR ALL COLUMNS SIZE 1', degree NUMBER DEFAULT NULL, granularity VARCHAR2 DEFAULT 'DEFAULT', cascade BOOLEAN DEFAULT FALSE, stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT FALSE);
这个包最常用,它是对表收集统计信息 ,语法如上所示,它的关键参数如下:
method_opt (直方图histogram选项)
先说说什么是直方图,直方图是对列上的数据分布进行统计,让优化器知道数据在各个列上 的分布情况,如果数据在某列上的分布很倾斜,则最好对该列收集直方图信息。
method_opt有如下选项:
for all columns -> 统计该表所有列的 直方图
for all indexed columns -> 统计该表上定义索引列的直方图
for columns <list> SIZE <N> | REPEAT | AUTO | SKEWONLY:N:直方 图桶数,取值范围[1,254],1相当于不收集直方图REPEAT:只收集原本有直方图信息的 列;AUTO:由Oracle自行决定N的大小SKEWONLY: 只收集非均匀分布列的直方图,系统自动决 定桶数(bucket )
示例1:在表t上收集统计信息,但不收集直方图:
exec dbms_stats.gather_table_stats(user,'t',method_opt=>'for all columns size 1');
示例2:以最大桶数收集直方图:
exec dbms_stats.gather_table_stats(user, 't', method_opt=>'for all columns size 254');
granularity (统计信息收集的粒度,针对分区表)该参数 主要针对分区表,分区表有以下三种类型的统计信息global -> 全局统计信息partition -> 分区统计信息sub-partition -> 子分区统计信息cascade (是否同时收集索引的统 计信息)该值为true等同于在该表上所有的索引上执行gather_index_stats。
2) gather_index_stats
DBMS_STATS.GATHER_INDEX_STATS ( ownname VARCHAR2, indname VARCHAR2, partname VARCHAR2 DEFAULT NULL, estimate_percent NUMBER DEFAULT to_estimate_percent_type (GET_PARAM('ESTIMATE_PERCENT')), stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')), granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (GET_PARAM('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE);
该函数用于收集索引的统计信息 。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索统计
, invalid method name:
, 分区表
, 信息
, varchar2
, default
直方图
oracle dbms stats、oracle11g dbms stats、dbms stats、sys.dbms stats、oracle index stats,以便于您获取更多的相关知识。