【調優】CBO基礎(八)

yellowlee發表於2011-12-27

直方圖

我們知道統計資訊主要包括:

 

表的統計資訊:

行數

塊數

平均行長度

 

列的統計資訊:

列的distinct值數

列的null

資料分佈

擴充套件資訊

 

索引的統計資訊:

葉塊數

高度

CF

 

系統的統計資訊:

Io的效能

Cpu的效能

 

其中資料分佈可以用直方圖來表現

分為:高度直方圖和頻度直方圖

 

前面已經探討了各種型別欄位的開銷計算模型,也很容易看出開銷模型的一些缺點,比如,如果欄位上資料傾斜很嚴重,那麼這樣計算而來的開銷可能不是正確的,從而導致cbo會選擇不恰當的執行計劃。

 

看看兩種不同型別的直方圖:

對於列的distinct值對於row number較小的時候,oracle生成頻率直方圖;而對於distinct 值較多,而沒有足夠的bukect來分這些值的時候,建立的就是高度直方圖。一般來講就是高度直方圖。

 

可以通過analyzedbms_stats的相關語句來建立直方圖:

Analyze table table_xxx  compute statistics for table for columns id size 1

 

exec dbms_stats.gather_table_stats('user_xxx', 'table_xxx',cascade=>false, method_opt=>'for columns col_xxx size 1');

 

可以測試一下直方圖的效果,資料傾斜比較嚴重的情況,比較有用。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16179598/viewspace-714030/,如需轉載,請註明出處,否則將追究法律責任。

相關文章