為基於函式index所產生的虛擬列蒐集統計資訊!
在建立函式index之後系統會自動產生虛擬列,而這一列也是隱藏的,在建立index時系統自動使用了compute statistics選項為建立的index蒐集了statistics,然而並不會為生成的虛擬列蒐集statistics,這時如果需要為虛擬列蒐集statistics就需要重新分析表或者單獨為虛擬列蒐集statistics。
[@more@]SQL> create table tt(id int , name char(1));
表已建立。
SQL> insert into tt values(1 , 'a');
已建立 1 行。
SQL> insert into tt values(2 , 'A');
已建立 1 行。
SQL> insert into tt values(3 , 'B');
已建立 1 行。
SQL> insert into tt values(4 , 'b');
已建立 1 行。
SQL> commit;
提交完成。
SQL> exec dbms_stats.gather_table_stats('XYS','TT');
PL/SQL 過程已成功完成。
SQL> select column_name
2 from user_tab_col_statistics
3 where table_name='TT';
COLUMN_NAME
------------------------------
ID
NAME
SQL> create index idx_tt on tt(upper(name));
索引已建立。
SQL> select table_name,column_name,hidden_column,virtual_column
2 from user_tab_cols
3 WHERE table_name='TT';
TABLE_NAME COLUMN_NAME HID VIR
------------------------------ ------------------------------ --- ---
TT SYS_NC00003$ YES YES
TT NAME NO NO
TT ID NO NO
--顯然SYS_NC00003$是生成的虛擬列
SQL> exec dbms_stats.gather_index_stats('XYS','IDX_TT');
PL/SQL 過程已成功完成。
SQL> select column_name
2 from user_tab_col_statistics
3 where table_name='TT';
COLUMN_NAME
------------------------------
ID
NAME
--蒐集index的statistics之後,虛擬列的statistics並沒有被蒐集
SQL> exec dbms_stats.gather_table_stats('XYS','TT');
PL/SQL 過程已成功完成。
SQL> select column_name
2 from user_tab_col_statistics
3 where table_name='TT';
COLUMN_NAME
------------------------------
ID
NAME
SYS_NC00003$
--重新分析表之後發現虛擬列的statistics被蒐集了
--插入驗證資料
SQL> insert into tt values(5 , 'c');
已建立 1 行。
SQL> commit;
提交完成。
SQL> select column_name,num_distinct
2 from user_tab_col_statistics
3 where table_name='TT';
COLUMN_NAME NUM_DISTINCT
------------------------------ ------------
ID 4
NAME 4
SYS_NC00003$ 2
--單獨為虛擬列蒐集statistics,因為我們清晰的看到儘管現在是5條資料,但是執行下面過程之後僅僅
是虛擬列SYS_NC00003$所對應 的NUM_DISTINCT由2變成了3,而id和name的NUM_DISTINCT都是4而不是5,
原因是使用了引數METHOD_OPT=>'for all hidden columns size AUTO',METHOD_OPT的default值是'for
all columns,因此透過使用引數METHOD_OPT=>'for all hidden columns size AUTO'可以單獨為函式索引
所生成的虛擬列蒐集statistics
SQL> exec dbms_stats.gather_table_stats(ownname=>'XYS',tabname=>'TT',METHOD_OPT=
>'for all hidden columns size AUTO');
PL/SQL 過程已成功完成。
SQL> select column_name,num_distinct
2 from user_tab_col_statistics
3 where table_name='TT';
COLUMN_NAME NUM_DISTINCT
------------------------------ ------------
ID 4
NAME 4
SYS_NC00003$ 3
SQL> select * from tt;
ID N
---------- -
1 a
2 A
3 B
4 b
5 c
SQL>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/19602/viewspace-1002643/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 基於labview虛擬函式訊號發生器的設計 最好有源程式View函式
- 虛擬函式,虛擬函式表函式
- 虛擬函式 純虛擬函式函式
- 關於類的建構函式不能為虛擬函式的幾點理由!函式
- 函式索引產生隱藏列函式索引
- Oracle中的虛擬列索引-nosegment indexOracle索引Index
- 介面、虛擬函式、純虛擬函式、抽象類函式抽象
- 虛擬函式函式
- C++中的虛擬函式與虛擬函式表 (轉)C++函式
- 抽象基類和純虛擬函式抽象函式
- 常見的不不能宣告為虛擬函式函式
- 關於虛擬函式的一些理解函式
- 探討基於資訊系統的專案型生產管理
- [Lang] 虛擬函式函式
- C++函式中那些不可以被宣告為虛擬函式的函式C++函式
- 基於函式index的一點簡單測試!函式Index
- 基於函式的索引(function-based index,FBI)函式索引FunctionIndex
- C++中抽象類、虛擬函式和純虛擬函式C++抽象函式
- 虛擬函式的呼叫原理函式
- 【C++筆記】虛擬函式(從虛擬函式表來解析)C++筆記函式
- 【C++筆記】虛擬函式(從虛擬函式概念來解析)C++筆記函式
- C++ 虛擬函式C++函式
- C++虛擬函式C++函式
- 虛擬函式釋義函式
- 11g新特性--基於虛擬列的分割槽
- 虛擬函式的實現原理函式
- C++ 中的虛擬函式C++函式
- C++之類解構函式為什麼是虛擬函式C++函式
- 基類指標、虛純虛擬函式、多型性、虛析構指標函式多型
- 【C++基礎】純虛擬函式 - pure virtual functionC++函式Function
- linux下虛擬光碟機的產生(轉)Linux
- 使用bind()函式的產生的函式用作建構函式this的指向函式
- 條款14 基類的解構函式一定要定義為虛擬函式(From Effective C++) (轉)函式C++
- c++虛擬函式表C++函式
- C++虛擬函式bugC++函式
- 虛擬函式與多型函式多型
- 生產sql調優之統計資訊分析SQL
- C++中虛擬函式的作用C++函式