Histogram总结

from:
Histogram总结
Histogram主要是提供数据的分布情况,以便Oracle的CBO能够做出最优的执行计划。
直方图的类型:
基于宽度平衡Histogram
将字段的属性分成相等的宽度,称作bucket。并计算行数同样的值被放置在同一个bucket中,如果几个行是同样的值,会放置为同一个bucket中,增机bucket的高度。

基于高度平衡Histogram
每个bucket有几乎相同数量的同样数量的行。如果几行是相同的值,将被放置到同一个或者分散到几个bucket上,也就是说同样值得行被放置在几个bucket中,而每一个bucket的高度,就是存放的行数几乎相同。高度平衡Histogram更适合于计算选择度的估计。
Popular值和nonpopular值
在添加Histogram时候,Oracle 9i区分Popular值和nonpopular值。
Popular值意思是这个值是多次作为bucket的结束点的值;而只是显示为一次或者根本就没有作为bucket的结束点的值的成为nonpopular值。

DENSITY统计
在添加一个Histogram地时候,DENSITY统计被计算。这个值为NUM_DISTINCE加1。

在优化器使用Histogram来估计选择度的时候,范围扫描的选择度是由这个值得bucket分布的数目来决定。当为等值得选择度则是由考虑两种情况:
一、如果这个值是Popular值的话,将根据bucket的数目来确定。
二、如果是nonpopular值的话,这是根据DENSITY统计来确定。

Histogram的收集
可以有两种方式收集Histogram统计数据:analyze和dbms_stats包。
在这两种收集的时候,可以有指定bucket数目或者使用缺省的bucket数目。

什么时间使用Histogram
主要是在字段上的数据有高度的数据分布的不均匀,即有部分数据占整个数据量的比例很大。这样特征的表应该建立Histogram

避免使用Histogram的情况:
1) 这部分字段不会在where字句中使用;
2) 字段是唯一的,只是在等值使用;
3) 所有的在此字段中的使用条件是用于绑定变量;
4) 字段中的数据是被均匀分配的
这里的第三点,说明在使用绑定变量的时候,Oracle的优化器并不知道这个字段上将绑定的变量的确切的值。所以并不能用到这个Histogram统计数据。而字段的值是唯一的话,说明在这个字段上所有的值将是均匀分布的。而在条件是等值使用的时候,Histogram统计数据是没有任何意义的。


需要bucket的数目
缺省的bucket的数量是75。可以根据自己的需要指定bucket的数量。最大的bucket数量是255。但是决定bucket数量的多少以达到最优的结果,是需要依靠经验来确定。同时在包dbms_stats中可以指定自动决定bucket的数量。
如果在这个字段上的值相对比较少的话,建议设置bucket的数量大于频繁使用的distinct值。
另外在一些资料上说,如果指定的bucket的数量小于字段的distinct值的话,Oracle将采用基于高度的直方图来反映数据的分布。

查看histogram的统计数据
User/all_histogram

Histogram的使用提示
 可以使用for all indexed columns选项
 如果数据分布可能动态改变得话,可以定期收集histogram统计数据;
 如果是使用绑定变量,histogram数据将不会被使用。
 Oracle推荐如果不需要充分提高性能的话,不需要使用histogram统计

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/230160/viewspace-674873/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/230160/viewspace-674873/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值