oracle直方图使用

 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/
请使用浏览器的分享功能分享到微信等