oracle 柱狀圖(Histograms)
柱狀圖(Histograms):
Height-Balanced Histograms:列中不同值的個數小於直方圖的桶數,每個桶的存放值的數量不同。
Frequency Histograms:列中不同值的個數大於直方圖的桶數,每個桶存放值的數量相同,最後一個桶除外。
收集方法:GATHER_TABLE_STATS==》method_opt 透過size引數指定直方圖的桶數:
SIZE {integer | REPEAT | AUTO | SKEWONLY}
auto:基於列的使用資訊(sys.col_usage$)和是否存在資料傾斜來收集直方圖
integer:人為的指定建立直方圖的桶數範圍是1到254,如果size 1意味著不建立直方圖
repeat:只會對已經存在直方圖的列重新生成直方圖.如果是一個分割槽表,repeat會確保對在全域性級別存在直方圖的列重新生成直方圖.這是不被推薦的設定的.當前直方圖的桶數將會作為重新生成直方圖所使用的桶數的最大值.比如,當前直方圖的桶數是5,那麼生成的直方圖最大桶數就是5,說的直白點就是重新整理現有直方圖的列上的統計資訊.
skewonly:對任何資料分佈出現傾斜列的自動建立直方圖
建立測試表:
Begin
Create table histest as select rownum id,10000 sal from dual connect by level <10000;
update histest set sal=id where rownum< =10;
update histest set sal=9 where id between '100' and '200';
update histest set sal=8 where id between '1000' and '5000';
commit;
select sal,count(*) from histest group by sal;
不收集柱狀圖:
exec dbms_stats.gather_table_stats('SCOTT','HISTEST',method_opt=>'for all columns size 1');
select column_name,num_distinct,density,HISTOGRAM from user_tab_col_statistics where table_name='HISTEST';
//density=1/num_distinct
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM
-------------------------------------------------- ------------ ---------- ---------------
ID 9999 .00010001 NONE
SAL 11 .090909091 NONE
收集柱狀圖:
exec dbms_stats.gather_table_stats('SCOTT','HISTEST',method_opt=>'for all columns size 11');
select column_name,num_distinct,density,HISTOGRAM from user_tab_col_statistics where table_name='HISTEST' and COLUMN_NAME='SAL';
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM
-------------------------------------------------- ------------ ---------- ---------------
SAL 11 .000050005 FREQUENCY
--檢視直方圖資訊:
select column_name,endpoint_number,endpoint_value from user_tab_histograms where
table_name='HISTEST' and COLUMN_NAME='SAL';
ENDPOINT_NUMBER:累計的行數
ENDPOINT_VALUE:真實列值
COLUMN_NAME ENDPOINT_NUMBER ENDPOINT_VALUE
-------------------------------------------------- --------------- --------------
SAL 1 1
SAL 2 2
SAL 3 3
SAL 4 4
SAL 5 5
SAL 6 6
SAL 7 7
SAL 4009 8
SAL 4111 9
SAL 4112 10 <=== 計算列值為10的個數4112-4111
SAL 9999 10000 <=== 計算列值為10000的個數9999-4112
高度平衡直方圖:
exec dbms_stats.gather_table_stats('SCOTT','HISTEST',method_opt=>'for all columns size 5');
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM
-------------------------------------------------- ------------ ---------- ---------------
SAL 11 .009466401 HEIGHT BALANCED
COLUMN_NAME ENDPOINT_NUMBER ENDPOINT_VALUE
-------------------------------------------------- --------------- --------------
SAL 0 1
SAL 2 8
SAL 5 10000
----這裡buckets 1,2都是用8作為它的endpoint所以bucket 1為了節省空間沒有被儲存.下面的查詢能用來顯示桶數和它的endpoinit值
----這裡buckets 3到5都是用10000作為它的endpoint所以bucket 3到4為了節省空間沒有被儲存.下面的查詢能用來顯示桶數和它的endpoinit值
BUCKET_NUMBER:桶的編號。
ENDPOINT_VALUE:桶中的值的最大值。
為了節省空間進行了合併:
BUCKET_NUMBER ENDPOINT_VALUE
------------- --------------
1 8
2 8
3 10000
4 10000
5 10000
---
SELECT bucket_number, max(sal) AS endpoint_value
FROM (
SELECT sal, ntile(5) OVER (ORDER BY sal) AS bucket_number
FROM histest)
GROUP BY bucket_number
ORDER BY bucket_number;
Height-Balanced Histograms:列中不同值的個數小於直方圖的桶數,每個桶的存放值的數量不同。
Frequency Histograms:列中不同值的個數大於直方圖的桶數,每個桶存放值的數量相同,最後一個桶除外。
The database automatically creates frequency histograms instead of height-balanced histograms under the following conditions:
-
The number of distinct values is less than or equal to the number of histogram buckets specified (up to 254).
-
It is not true that each column value repeats only once.
收集方法:GATHER_TABLE_STATS==》method_opt 透過size引數指定直方圖的桶數:
SIZE {integer | REPEAT | AUTO | SKEWONLY}
auto:基於列的使用資訊(sys.col_usage$)和是否存在資料傾斜來收集直方圖
integer:人為的指定建立直方圖的桶數範圍是1到254,如果size 1意味著不建立直方圖
repeat:只會對已經存在直方圖的列重新生成直方圖.如果是一個分割槽表,repeat會確保對在全域性級別存在直方圖的列重新生成直方圖.這是不被推薦的設定的.當前直方圖的桶數將會作為重新生成直方圖所使用的桶數的最大值.比如,當前直方圖的桶數是5,那麼生成的直方圖最大桶數就是5,說的直白點就是重新整理現有直方圖的列上的統計資訊.
skewonly:對任何資料分佈出現傾斜列的自動建立直方圖
建立測試表:
Begin
Create table histest as select rownum id,10000 sal from dual connect by level <10000;
update histest set sal=id where rownum< =10;
update histest set sal=9 where id between '100' and '200';
update histest set sal=8 where id between '1000' and '5000';
commit;
select sal,count(*) from histest group by sal;
不收集柱狀圖:
exec dbms_stats.gather_table_stats('SCOTT','HISTEST',method_opt=>'for all columns size 1');
select column_name,num_distinct,density,HISTOGRAM from user_tab_col_statistics where table_name='HISTEST';
//density=1/num_distinct
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM
-------------------------------------------------- ------------ ---------- ---------------
ID 9999 .00010001 NONE
SAL 11 .090909091 NONE
收集柱狀圖:
exec dbms_stats.gather_table_stats('SCOTT','HISTEST',method_opt=>'for all columns size 11');
select column_name,num_distinct,density,HISTOGRAM from user_tab_col_statistics where table_name='HISTEST' and COLUMN_NAME='SAL';
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM
-------------------------------------------------- ------------ ---------- ---------------
SAL 11 .000050005 FREQUENCY
--檢視直方圖資訊:
select column_name,endpoint_number,endpoint_value from user_tab_histograms where
table_name='HISTEST' and COLUMN_NAME='SAL';
ENDPOINT_NUMBER:累計的行數
ENDPOINT_VALUE:真實列值
COLUMN_NAME ENDPOINT_NUMBER ENDPOINT_VALUE
-------------------------------------------------- --------------- --------------
SAL 1 1
SAL 2 2
SAL 3 3
SAL 4 4
SAL 5 5
SAL 6 6
SAL 7 7
SAL 4009 8
SAL 4111 9
SAL 4112 10 <=== 計算列值為10的個數4112-4111
SAL 9999 10000 <=== 計算列值為10000的個數9999-4112
高度平衡直方圖:
exec dbms_stats.gather_table_stats('SCOTT','HISTEST',method_opt=>'for all columns size 5');
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM
-------------------------------------------------- ------------ ---------- ---------------
SAL 11 .009466401 HEIGHT BALANCED
COLUMN_NAME ENDPOINT_NUMBER ENDPOINT_VALUE
-------------------------------------------------- --------------- --------------
SAL 0 1
SAL 2 8
SAL 5 10000
----這裡buckets 1,2都是用8作為它的endpoint所以bucket 1為了節省空間沒有被儲存.下面的查詢能用來顯示桶數和它的endpoinit值
----這裡buckets 3到5都是用10000作為它的endpoint所以bucket 3到4為了節省空間沒有被儲存.下面的查詢能用來顯示桶數和它的endpoinit值
BUCKET_NUMBER:桶的編號。
ENDPOINT_VALUE:桶中的值的最大值。
為了節省空間進行了合併:
BUCKET_NUMBER | ENDPOINT_VALUE | BUCKET_NUMBER | ENDPOINT_VALUE | |
0 | 1 | 2 | 8 | |
1 | 8 | 1 | 8 | |
2 | 8 | 5 | 10000 | |
3 | 10000 | |||
4 | 10000 | |||
5 | 10000 |
BUCKET_NUMBER ENDPOINT_VALUE
------------- --------------
1 8
2 8
3 10000
4 10000
5 10000
---
SELECT bucket_number, max(sal) AS endpoint_value
FROM (
SELECT sal, ntile(5) OVER (ORDER BY sal) AS bucket_number
FROM histest)
GROUP BY bucket_number
ORDER BY bucket_number;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28211342/viewspace-2153331/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle直方圖 (柱狀圖 histograms) 詳解Oracle直方圖Histogram
- 柱狀圖
- 九、柱狀圖和3D柱狀圖3D
- PyQtGraph之柱狀圖QT
- ORACLE柱狀圖與執行計劃(轉)Oracle
- canvas圖表(1) - 柱狀圖Canvas
- 資料視覺化:圖表篇(1)—— 基本柱狀圖、堆疊柱狀圖視覺化
- JavaScript介面畫柱狀圖JavaScript
- oracle 11g 柱狀Oracle
- Oracle HistogramsOracleHistogram
- Echarts 柱狀圖配置詳解Echarts
- 【matplotlib 實戰】--柱狀圖
- 垂直柱狀圖(模擬+字串)字串
- Echarts根據資料長度變換柱狀圖柱狀的顏色Echarts
- 柱狀圖與執行計劃
- echarts 設定柱狀圖寬度Echarts
- 使用 Flutter 繪製圖表(一)柱狀圖?Flutter
- R繪圖(06)——帶errorbar的柱狀圖繪圖ErrorORB
- echarts如何在每個柱狀圖上都顯示氣泡詳解(好看的柱狀圖)Echarts
- 直方圖(histograms)直方圖Histogram
- 柱狀圖、直方圖、散點圖、餅圖講解直方圖
- amCharts繪製折線圖和柱狀圖混合
- echarts 柱狀圖 詳解與使用集合Echarts
- canvas帶有座標的柱狀圖效果Canvas
- 84. 柱狀圖中最大的矩形
- python-資料分析-Matplotlib-1-基礎圖形(曲線圖-散點-柱狀-堆疊柱狀-餅狀圖-直方圖)Python直方圖
- [zt] Histograms - 直方圖Histogram直方圖
- MPAndroidChart繪製曲線圖、柱狀圖總結Android
- vue實現一個動效柱狀圖Vue
- D3.js —— 繪製柱狀圖(一)JS
- D3.js —— 繪製柱狀圖(二)JS
- javascript柱狀統計圖程式碼例項JavaScript
- Android 自定義帶動畫的柱狀圖Android動畫
- 繪製帶誤差分析的柱狀圖
- Android簡易柱狀圖和曲線圖表實現Android
- Highcharts 柱狀圖設定柱體偏移量使柱體緊靠在一起
- Py-plt: Matplotlib常用柱狀圖詳解
- 柱狀圖和列統計資訊的關係