Oracle 12c新特性 - Hybrid histogram 2

tolywang發表於2014-03-24

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章