加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

2、直方图

发布时间:2020-12-12 13:20:52 所属栏目:百科 来源:网络整理
导读:? 什么是直方图? 直方图就是柱状图,表现了表中某一列不同键值的数据的分布情况。? (例如:性别列? ?男有多少行,女有多少个行) 直方图分为? 频率直方图? 和? ?等高直方图 ? ? ? 直方图最多只能有254个捅。如果列上的唯一值多余254个,就会出现一个桶放多

?

什么是直方图?

直方图就是柱状图,表现了表中某一列不同键值的数据的分布情况。? (例如:性别列? ?男有多少行,女有多少个行)

直方图分为? 频率直方图? 和? ?等高直方图

?

?

?

直方图最多只能有254个捅。如果列上的唯一值多余254个,就会出现一个桶放多个值的情况。

?

直方图相关的影响:

1、Oracle怎么判断一个sql是否要走索引:如果一条sql返回的行数是表的5%以内,那么Oracle就选择走索引。如果是5%以上,Oracle就不选择走索引。

2、在没有统计信息的表中,Oracle通过动态采样来判断应不应该走索引。

3、如果收集了统计信息,但是没有直方图的话。返回结果集的计算可能是不准确的。CBO会用? 总行数/基数? 来算出来返回的结果集数量(当数据分布倾斜的时候,这种计算是存在很大问题的)。如果列上没有直方图,CBO就认为列上的数据是分布均衡的。

4、查看统计信息的相关视图:? dba_table(num_rows)? ? ? dba_tab_col_statistics(table_name,column_name,num_distinct,histogram,num_buckets,last_analyzed)

5、列的基数很低的话,一般数据分布就会不均衡,要收集直方图。对于选择性很好的列和主键列,不收集直方图是没有影响的。

?

?

试验:

1、创建一张表并在OWNER上创建索引。

create table test as select * from sys.dba_objects;??

create index idx_test_owner on test(owner);

?

2、在没有统计信息的情况下 select * from test where OWNER=‘SYS‘;

优化器用动态采样,预计表的返回行数为55242,采用全表扫描的方式

?

3、收集统计信息但是不收集直方图:select * from test where OWNER=‘SYS‘;

execute dbms_stats.gather_table_stats(ownname => ‘SCOTT‘,tabname => ‘TEST‘,method_opt => ‘for all columns size 1‘);

CBO选择走索引了,为什么呢?? ?我们来看一下表的统计信息。

?

select a.column_name,b.num_rows,a.num_distinct,a.histogram,a.num_buckets
from dba_tab_col_statistics a,dba_tables b
where a.owner = b.owner 
and a.table_name=b.table_name
and a.owner=&owner
and a.table_name=&tablename;

表有8W行,OWNER列有26个唯一值,那么在没有直方图的情况下,Oracle认为列上的数据分布是均匀的。 结果集应该返回? 84664/26=3256行,? ?3256/84664=3.8%? ?返回的行数为总行数的3.8%,小于5%。所以CBO选择走索引。

?

4、收集统计信息,收集直方图:select * from test where owner=‘SYS‘;

begin
dbms_stats.gather_table_stats
(ownname => SCOTT,tabname => TEST,method_opt => for all columns size skewonly,estimate_percent => 100,no_invalidate => false,cascade =>true);
end;
/

统计信息:

执行计划:

此时 CBO选择了走全表扫描,因为直方图中记录了列中值的分布情况,准确的评估出了OWNER=‘SYS‘的列有37830行,占整个行数的比例绝对超过了5%。所以CBO选择走全表扫描。

?

?

总结:

可见直方图记录了列上的数据分布,避免了CBO在数据倾斜的情况下选择错误的执行计划,是很重要的一个东西。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读