ORACLE的直方圖的一些試驗
直方圖有兩種類別,等頻直方圖與等高直方圖。
預設的,如果一個傾斜列上的唯一值超過了254個,那麼ORACLE會對此列建立等高直方圖,否則建立等頻直方圖。
透過如下方式,建立表TAB,更新欄位B,讓列B產生傾斜。並在B列上建立索引。
SQL> spool d:\hist.txt
SQL> create table tab (a number, b number);
表已建立。
SQL>
SQL> begin
2 for i in 1..10000 loop
3 insert into tab values (i, i);
4 end loop;
5 commit;
6 end;
7 /
PL/SQL 過程已成功完成。
SQL> update tab set b=5 where b between 6 and 9995;
已更新9990行。
SQL> commit;
提交完成。
SQL> create index ix_tab_b on tab(b);
索引已建立。
然後分析表,強制使列B不產生直方圖。
BEGIN
DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => 'SCOTT',
TABNAME => 'TAB',
CASCADE => TRUE,
METHOD_OPT => 'FOR COLUMNS B SIZE 1 ');
END;
檢視檢視USER_TAB_HISTOGRAMS,列B上只有最大值,最小值兩條記錄分別對應端點號(endpoint_number)0和1,這種顯示說明列B沒有直方圖資訊。
SQL>SELECT table_name,column_name,endpoint_number,endpoint_value FROM USER_TAB_HISTOGRAMS WHERE TABLE_NAME='TAB' ;
TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ENDPOINT_VALUE
------------------------------ ---------------------------------------- --------------- --------------
TAB B 0 1
TAB B 1 10000
在沒有直方圖的情況下,在B列上進行等值查詢的時候,都是索引範圍掃描。
SQL> select * from tab where b=1;
執行計劃
----------------------------------------------------------
Plan hash value: 439197569
----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1000 | 6000 | 4 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| TAB | 1000 | 6000 | 4 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IX_TAB_B | 1000 | | 2 (0)| 00:00:01 |
----------------------------------------------------------------------------------------
SQL> select * from tab where b=5;
已選擇9991行。
執行計劃
----------------------------------------------------------
Plan hash value: 439197569
----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1000 | 6000 | 4 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| TAB | 1000 | 6000 | 4 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IX_TAB_B | 1000 | | 2 (0)| 00:00:01 |
----------------------------------------------------------------------------------------
[ 本帖最後由 wei-xh 於 2010-5-8 14:12 編輯 ]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22034023/viewspace-662227/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 直方圖Oracle直方圖
- oracle直方圖使用Oracle直方圖
- Oracle直方圖解析Oracle直方圖圖解
- oracle統計資訊--直方圖的收集:Oracle直方圖
- Oracle直方圖詳解Oracle直方圖
- Oracle直方圖統計資訊的應用Oracle直方圖
- oracle直方圖筆記-轉Oracle直方圖筆記
- (轉)Oracle直方圖詳解Oracle直方圖
- Oracle直方圖詳解(ZT)Oracle直方圖
- dba_histograms等高直方圖和等頻直方圖的理解Histogram直方圖
- 直方圖直方圖
- oracle直方圖histogram小記(一)Oracle直方圖Histogram
- 轉貼oracle直方圖histogram(二)Oracle直方圖Histogram
- 【效能優化】Oracle直方圖解析優化Oracle直方圖圖解
- oracle統計資訊和直方圖Oracle直方圖
- 收集直方圖及檢視直方圖資訊直方圖
- Oracle直方圖 (柱狀圖 histograms) 詳解Oracle直方圖Histogram
- Oracle的自動統計資訊不收集直方圖的資訊Oracle直方圖
- 直方圖(histograms)直方圖Histogram
- 7.3 直方圖直方圖
- 聊一聊MySQL的直方圖MySql直方圖
- Oracle直方圖 32位元組限制Oracle直方圖
- 直方圖均衡化直方圖
- 04:垂直直方圖直方圖
- 直方圖學習直方圖
- [zt] Histograms - 直方圖Histogram直方圖
- 一文搞懂 Prometheus 的直方圖Prometheus直方圖
- col_usage$與直方圖的收集直方圖
- [轉] oracle統計資訊(statistics)和直方圖(histogram)Oracle直方圖Histogram
- 【TUNE_ORACLE】列出必須建立直方圖的列SQL參考Oracle直方圖SQL
- [20170615]直方圖-高度直方圖(11g).txt直方圖
- 直方圖中最大矩形直方圖
- 【效能優化】直方圖優化直方圖
- matplotlib的直方圖繪製(筆記)直方圖筆記
- 關於列的直方圖統計資訊直方圖
- [Python影象處理] 十一.灰度直方圖概念及OpenCV繪製直方圖Python直方圖OpenCV
- OpenCV計算機視覺學習(9)——影像直方圖 & 直方圖均衡化OpenCV計算機視覺直方圖
- 蛋疼的CBO等高直方圖演算法直方圖演算法