oracle直方圖使用

xychong123發表於2016-12-16

 Height-Balanced Histograms:當桶數量<列中的不同值的個數,或者不同值大於254.


最佳化器首先會檢查在直方圖中使用謂詞作為endpoint的有多少個bucket
1,如果有多個,計算公式:
Number of bucket endpoints / total number of buckets) *  number of rows in the table
2,
對於只是一個bucket或者不是任何bucket的endpoint的值最佳化器將使用下面的計算公式:

DENSITY  * number of rows in the table

Frequency Histograms:當列中的不同值的個資料小於254時會建立頻率直方圖(當桶數量>列中的不同值的個數)


最佳化器現在使用頻率直方圖可以精確的判斷謂詞的基數,

     例如,對於謂詞promo_category_id=10,最佳化器首先需要判斷在直方圖中10作為end point的bucket的數量.透過找到endpoint為10的bucket 503,然後減去前面的bucket數,bucket 483,503-483=20.然後基數評估將使用下面的公式進行計算(number of bucket endpoints/ total number of bucket) * num_rows,20/503*503,所以在promotoins表中promo_category_id=10的記錄有20行.
 
Oracle基於列的使用資訊(SYS.COL_USAGE$)和資料的傾斜情況能自動判斷這個列是否需要直方圖.例如只在一個等號謂詞中看到的唯一性列oracle是不會對這個唯一性列自動建立直方圖.

http://blog.itpub.net/26015009/viewspace-1068582/

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

相關文章