cbo心得(選擇率,基數,直方圖)(五)
延伸
1, 直方圖的分類
直方圖可以分為兩類:FREQUENCY(頻率)和HEIGHT BALANCED(高度平衡)
在弄明白這兩類直方圖,首先得知道什麼直方圖。用上面的例子來說明下:
SQL> select ENDPOINT_NUMBER,
2 ENDPOINT_VALUE
3 from user_tab_histograms
4 where table_name ='SUNWG'
5 and column_name = 'ID'
6 order by ENDPOINT_NUMBER;
ENDPOINT_NUMBER ENDPOINT_VALUE
--------------- --------------
6 1
7 201
8 801
9 1401
10 2001
上面就是列ID上的直方圖資訊,左邊一列是截止點的編號,右邊一列是截止點值。這個結果看起來有些奇怪,因為缺少了1,2,3,4和5,實際上由於這幾個值的ENDPOINT_VALUE都是1,所以ORACLE為了方便就把他們都省略了。對直方圖資訊補全後應該如下:
ENDPOINT_NUMBER ENDPOINT_VALUE
--------------- --------------
0 1
1 1
2 1
3 1
4 1
5 1
6 1
7 201
8 801
9 1401
10 2001
不知道大家還記得不,在user_tab_columns裡面有一個列叫做NUMBER_BUCTETS,這個代表直方圖的籃子個數。這麼講吧,在表SUNWG中一共有6000條記錄,我把這6000條記錄按照ID的大小進行排序,排序後的結果大概是1,1,1…1999,2000,2001,一共有6000條。在前面我做直方圖統計的時候設定的BUCTET的個數是10,就等於把這6000條記錄按照ID的順序分成十份,放到十個籃子中。那麼第一個籃子的開始值就應該是ENDPOINT_NUMBER = 0所代表的ENDPOINT_VALUE,也就是1,第一個籃子的截止值就應該是ENDPOINT_NUMBER = 1所代表的ENDPOINT_VALUE,也是1。依次類推,可以得到下面的結果
1…1|…1|…1|…1|…1|…1|…201|…801|…1401|…2001|
每個籃子中的記錄數是6000/10 = 600。
所以我們最後得到的直方圖資訊的準確性就由兩個數值決定,一個是BUCTET的個數,一個NUM_DISTINCT的個數。
當BUCTET < NUM_DISTINCT得到的是HEIGHT BALANCED(高度平衡)直方圖,而當BUCTET = NUM_DISTINCT的時候得到的是FREQUENCY(頻率)直方圖。這裡面BUCTET的最大值是254,所以我們一般見到的直方圖都是HEIGHT BALANCED(高度平衡)直方圖。
舉個小例子來說明下兩者的區別
假設一個的列的值有這幾個:1,1,3,4。這個時候NUM_DISTINCT = 3
當我們設定BUCTET = 2收集直方圖資訊的時候應該會得到下面的結果
ENDPOINT_NUMBER ENDPOINT_VALUE
--------------- --------------
0 1
1 1
2 4
而當我們設定BUCTET = 3收集直方圖資訊的時候應該會得到下面的結果
ENDPOINT_NUMBER ENDPOINT_VALUE
--------------- --------------
0 1
1 1
2 1
3 3
4 4
應該可以看出來兩著的差別吧。一般說來,BUCTET越多,那麼關於列的分佈情況資訊就越準確,可是在統計直方圖的時候會消耗更多的資源。
當我們設定BUCTET = 1的時候,就等於是刪除了直方圖資訊。
Analyze table sunwg compute statistics for table for columns id size 1;
1, non-popular value 和 popular value
CBO在計算基數的時候,對於non-popular value 和 popular value的處理不完全不同的。首先我們需要明白non-popular value 和 popular value的區別。拿前面的例子來說,
ENDPOINT_NUMBER ENDPOINT_VALUE
--------------- --------------
0 1
1 1
2 1
3 1
4 1
5 1
6 1
7 201
8 801
9 1401
10 2001
popular value顧名思義,就是很流行的值,在這就是出現次數比較多的值,上面的例子中ID = 1 就是一個popular value,因為1在ENDPOINT_VALUE出現了多次。那麼什麼是non-popular value呢,除了popular value以外的值都是non-popular value。
對於HEIGHT BALANCED的直方圖來說,non-popular value 和 popular value的劃分僅僅是一個近似的結果。有可能本來20是popular value,但是由於BUCKET的原因,被CBO當成了non-popular value;反過來也是一樣的。
對於FREQUENCY(頻率)的直方圖來說就不存在這樣的問題,因為FREQUENCY(頻率)直方圖的資訊是完全的
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9533994/viewspace-1008781/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- cbo心得(選擇率,基數,直方圖)(一)直方圖
- cbo心得(選擇率,基數,直方圖)(二)直方圖
- cbo心得(選擇率,基數,直方圖)(三)直方圖
- cbo心得(選擇率,基數,直方圖)(四)直方圖
- 【cbo計算公式】Frequenccy 直方圖選擇率(三)公式直方圖
- 【cbo計算公式】Height-balance直方圖選擇率(四)公式直方圖
- 直方圖、基數、選擇性、群集因子直方圖
- CBO中基數(cardinality)、可選擇率(selectivity)的計算公式公式
- 【cbo計算公式】Join 選擇率(六)公式
- 【cbo計算公式】單表選擇率(二)公式
- 蛋疼的CBO等高直方圖演算法直方圖演算法
- 基於CBO優化器謂詞選擇率的計算方法優化
- CBO計算與資料型別的選擇(兼談日期、字元、數字三種型別的直方圖生成原理和使用)資料型別字元直方圖
- 基於CBO最佳化器謂詞選擇率的計算方法
- 選擇率(selectivity)與基數(cardinality)
- 直方圖直方圖
- 收集直方圖及檢視直方圖資訊直方圖
- 【調優】CBO基礎(五)
- 關於高度均衡和頻率均衡的直方圖直方圖
- 深度學習(模型引數直方圖)深度學習模型直方圖
- 直方圖(histograms)直方圖Histogram
- 7.3 直方圖直方圖
- oracle 直方圖Oracle直方圖
- 直方圖均衡化直方圖
- 04:垂直直方圖直方圖
- oracle直方圖使用Oracle直方圖
- 直方圖學習直方圖
- Oracle直方圖解析Oracle直方圖圖解
- [zt] Histograms - 直方圖Histogram直方圖
- dba_histograms等高直方圖和等頻直方圖的理解Histogram直方圖
- [20170615]直方圖-高度直方圖(11g).txt直方圖
- 直方圖中最大矩形直方圖
- Oracle直方圖詳解Oracle直方圖
- 【效能優化】直方圖優化直方圖
- MATLAB實現頻數直方圖——hist的使用Matlab直方圖
- oracle實驗記錄 (oracle單表選擇率與基數計算(1))Oracle
- oracle實驗記錄 (oracle單表選擇率與基數計算(2))Oracle
- oracle實驗記錄 (oracle單表選擇率與基數計算(3))Oracle