12c发布后,很多大师都在研究histogram,但文章太长,讨论了许多细节,我来做个概述:
12c中新增加了2中类型的histogram:
1 Top Frequency Histogram, Frequency histogram的改进版
NDV的值虽然超过了bucket的数量,但是所占整体比例较小,干脆忽略掉。
2 Hybrid Histogram, Hight-Balance histogram的改进版,结合了Frequency histogram的特点,故叫混合直方图
Hight-Balance理解有点困难,而且不够精确;Hybrid的基本原则是每个值最多只用一个bucket,用Frequency的方法记录repeat count, 这就需要动态调整bucket的大小(西游记里面的神袋,有多少装多少),不再是过去的固定大小了。
如果搜集统计信息的时候指定了estimate_percent(准确地说不是auto_sample_size), 则与以前一样,否则:
1 NDV < buckets, 则是Frequency histogram
2 NDV > buckets, 且top n的数据量超过标准:1-1/n, 则是Top Frequency histogram, n之外的NDV值被抛弃
3 NDV > buckets, 且Top n的数据量小于标准:1-1/n, 则是Hybrid Histogram
我也想把我以前写的脚本改进一下,初看了一下,改动很大,估计工作量不小,先看下概述吧:
至于详细的特点和选择率的计算,想研究一下,并且更新下我的脚本,由于要用到新的列,
估计工作量不小,无法兼容12c以前的数据库了
[histogram一]显示histogram中列值的详细分布情况
阅读(1976) | 评论(1) | 转发(0) |