日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Oracle性能優(yōu)化之虛擬索引

虛擬索引是定義在數(shù)據(jù)字典中的偽索引,但沒有相關的索引段。虛擬索引的目的是模擬索引的存--而不用真實的創(chuàng)建一個完整索引。這允許開發(fā)者創(chuàng)建虛擬索引來查看相關執(zhí)行計劃而不用等到真實創(chuàng)建完索引才能查看索引對執(zhí)行計劃的影響,并且不會增加存儲空間的使用。如果我們觀察到優(yōu)化器生成了一個昂貴的執(zhí)行計劃并且SQL調(diào)整指導建議我們對某些的某列創(chuàng)建索引,但在生產(chǎn)數(shù)據(jù)庫環(huán)境中創(chuàng)建索引與測試并不總是可以操作。我們需要確保創(chuàng)建的索引將不會對數(shù)據(jù)庫中的其它查詢產(chǎn)生負面影響,因此可以使用虛擬索引。

10年積累的成都網(wǎng)站制作、成都網(wǎng)站設計經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先制作網(wǎng)站后付款的網(wǎng)站建設流程,更有燈塔免費網(wǎng)站建設讓你可以放心的選擇與我們合作。

下面舉例進行說明:

1.創(chuàng)建一個測試表test

 
 
 
  1. SQL> create table test as select * from dba_objects; 
  2. Table created.

2.從表test查詢object_name等于standard的記錄

 
 
 
  1. SQL> select * from test where object_name='STANDARD'; 
  2.  
  3. OWNER 
  4.  
  5. ------------------------------ 
  6.  
  7. OBJECT_NAME 
  8.  
  9. -------------------------------------------------------------------- 
  10.  
  11. SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE 
  12.  
  13. ------------------------------ ---------- -------------- ----------- 
  14.  
  15. CREATED LAST_DDL_TIM TIMESTAMP STATUS T G S 
  16.  
  17. ------------ ------------ ------------------- ------- - - - 
  18.  
  19. SYS 
  20.  
  21. STANDARD 
  22.  
  23. 888 PACKAGE 
  24.  
  25. 19-APR-10 19-APR-10 2003-04-18:00:00:00 VALID N N N 
  26.  
  27. OWNER 
  28.  
  29. ------------------------------ 
  30.  
  31. OBJECT_NAME 
  32.  
  33. -------------------------------------------------------------------- 
  34.  
  35. SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE 
  36.  
  37. ------------------------------ ---------- -------------- ------------------- 
  38.  
  39. CREATED LAST_DDL_TIM TIMESTAMP STATUS T G S 
  40.  
  41. ------------ ------------ ------------------- ------- - - - 
  42.  
  43. SYS 
  44.  
  45. STANDARD 
  46.  
  47. 889 PACKAGE BODY 
  48.  
  49. 19-APR-10 19-APR-10 2010-04-19:10:22:58 VALID N N N 

3.查詢上面查詢的執(zhí)行計劃

 
 
 
  1. SQL> set autotrace traceonly explain 
  2.  
  3. SQL> select * from test where object_name='STANDARD'; 
  4.  
  5. Execution Plan 
  6.  
  7. ---------------------------------------------------------- 
  8.  
  9. Plan hash value: 1357081020 
  10.  
  11. -------------------------------------------------------------------------- 
  12.  
  13. | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | 
  14.  
  15. -------------------------------------------------------------------------- 
  16.  
  17. | 0 | SELECT STATEMENT | | 8 | 1416 | 155 (1)| 00:00:02 | 
  18.  
  19. |* 1 | TABLE ACCESS FULL| TEST | 8 | 1416 | 155 (1)| 00:00:02 | 
  20.  
  21. -------------------------------------------------------------------------- 
  22.  
  23. Predicate Information (identified by operation id): 
  24.  
  25. --------------------------------------------------- 
  26.  
  27. 1 - filter("OBJECT_NAME"='STANDARD') 
  28.  
  29. Note 
  30.  
  31. ----- 
  32.  
  33. - dynamic sampling used for this statement 

4.在表test的object_name列上創(chuàng)建一個虛擬索引

 
 
 
  1. SQL> create index test_index on test(object_name) nosegment;Index created. 

為了創(chuàng)建虛擬索引必須在create index語句中指定nosegment子句,并且不會創(chuàng)建索引段。

5.來驗證虛擬索引不會創(chuàng)建索引段

 
 
 
  1. SQL> set autotrace off 
  2.  
  3. SQL> select index_name from dba_indexes where table_name = 'TEST' and index_name = 'TEST_INDEX'; 
  4.  
  5. no rows selected 
  6.  
  7. SQL> col OBJECT_NAME format a20; 
  8.  
  9. SQL> select object_name, object_type from dba_objects where object_name = 'TEST_INDEX'; 
  10.  
  11. OBJECT_NAME OBJECT_TYPE 
  12.  
  13. -------------------- ------------------- 
  14.  
  15. TEST_INDEX INDEX 

從上面的結果可以看到索引對象已經(jīng)創(chuàng)建,但沒有創(chuàng)建索引段。

6.重新執(zhí)行sql查看創(chuàng)建的虛擬索引是否被使用

 
 
 
  1. SQL> set autotrace traceonly explainSQL> select * from test where object_name='STANDARD'; 
  2.  
  3. Execution Plan 
  4.  
  5. ---------------------------------------------------------- 
  6.  
  7. Plan hash value: 1357081020 
  8.  
  9. -------------------------------------------------------------------- 
  10.  
  11. | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | 
  12.  
  13. -------------------------------------------------------------------- 
  14.  
  15. | 0 | SELECT STATEMENT | | 8 | 1416 | 155 (1)| 00:00:02 | 
  16.  
  17. |* 1 | TABLE ACCESS FULL| TEST | 8 | 1416 | 155 (1)| 00:00:02 | 
  18.  
  19. -------------------------------------------------------------------- 
  20.  
  21. Predicate Information (identified by operation id): 
  22.  
  23. --------------------------------------------------- 
  24.  
  25. 1 - filter("OBJECT_NAME"='STANDARD') 
  26.  
  27. Note 
  28.  
  29. ----- 
  30.  
  31. - dynamic sampling used for this statement 

從上面的執(zhí)行計劃可以清楚地看到創(chuàng)建的虛擬索引并沒有被使用。

7.為了能使用所創(chuàng)建的虛擬索引,需要將_USE_NOSEGMENT_INDEXES設置為true

 
 
 
  1. SQL> alter session set "_USE_NOSEGMENT_INDEXES" = true;Session altered. 

8.重新執(zhí)行sql查看創(chuàng)建的虛擬索引是否被使用

 
 
 
  1. SQL> set long 900SQL> set linesize 900 
  2.  
  3. SQL> select * from test where object_name='STANDARD'; 
  4.  
  5. Execution Plan 
  6.  
  7. ---------------------------------------------------------- 
  8.  
  9. Plan hash value: 2627321457 
  10.  
  11. -------------------------------------------------------------------- 
  12.  
  13. | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | 
  14.  
  15. -------------------------------------------------------------------- 
  16.  
  17. | 0 | SELECT STATEMENT | | 8 | 1416 | 5 (0)| 00:00:01 | 
  18.  
  19. | 1 | TABLE ACCESS BY INDEX ROWID| TEST | 8 | 1416 | 5 (0)| 00:00:01 | 
  20.  
  21. |* 2 | INDEX RANGE SCAN | TEST_INDEX | 238 | | 1 (0)| 00:00:01 | 
  22.  
  23. -------------------------------------------------------------------- 
  24.  
  25. Predicate Information (identified by operation id): 
  26.  
  27. --------------------------------------------------- 
  28.  
  29. 2 - access("OBJECT_NAME"='STANDARD') 
  30.  
  31. Note 
  32.  
  33. ----- 
  34.  
  35. - dynamic sampling used for this statement 

從上面的執(zhí)行計劃可以看到當設置隱含參數(shù)_USE_NOSEGMENT_INDEXES后,優(yōu)化器將會使用創(chuàng)建的虛擬索引。在使用虛擬索引需要注意,我們可以分析虛擬索引,但不能重建虛擬索引,如果重建虛擬索引會收到ORA-8114: "User attempted to alter a fake index"錯誤提示,可以刪除虛擬索引。


新聞名稱:Oracle性能優(yōu)化之虛擬索引
分享URL:http://www.dlmjj.cn/article/djcsscc.html