3. 生成 hybrid histogram
从上面的表达式,我们可适当在后面增加distinct value来达到生成 hybrid histogram的要求。 我们增加 13~36 这几个整数到 table的code列中,每个值1行记录。 总数变成 192+24=216 。现在的 distinct 值有 12+24=36 ,桶的个数n可以取大一些的值以便满足条件。比如
n=16 < NDV=36 ,且此时计算value个数排在top 16 行的总数为 196 :
select sum(CNT) from (
select code , count(1) as CNT from hw.test_tmp3 group by code order by count(1) desc
) where rownum<=16 ;
1 - 1/16 =0.9375 > 196/216 = 0.9074,满足生成混合直方图的第二个条件, 我们再来看看是否会生成混合直方图。
exec dbms_stats.gather_table_stats('hw','test_tmp3',method_opt=>'for all columns size 16');
Column Name ID Pk Null? Data Type Default Histogram Encryption Alg Salt
CODE 1 Y NUMBER Hybrid
NAME 2 Y VARCHAR2 (80 Byte) Frequency
TYPE 3 Y VARCHAR2 (6 Byte) Frequency
UPDATE_DATE 4 Y DATE Hybrid
可以看到CODE列上已经生成了hybrid直方图 .
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-1128180/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/35489/viewspace-1128180/