Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle डेटाबेस में वर्चुअल इंडेक्स का उपयोग कैसे करें

Oracle में  वर्चुअल इंडेक्स क्या है?

  • वर्चुअल इंडेक्स एक "नकली" इंडेक्स है जिसकी परिभाषा डेटा डिक्शनरी में मौजूद है, लेकिन इसका कोई संबद्ध इंडेक्स सेगमेंट नहीं है।
  • कई बार sql ट्यूनिंग सलाहकार आपको नई अनुक्रमणिका बनाने की सलाह देते हैं और आप नए अनुक्रमणिका का परीक्षण करना चाहते हैं। इस मामले में बड़ी तालिकाओं में अनुक्रमणिका जोड़ने में अच्छा समय लग सकता है और तालिका बड़ी होने पर भी यह बड़ी डिस्क स्थान का उपभोग करेगी। साथ ही अतिरिक्त अनुक्रमणिका अन्य सत्रों के उपयोग के लिए उपलब्ध हैं, जो अन्य भागों के प्रदर्शन को प्रभावित कर सकती हैं आपके आवेदन का कि आप वर्तमान में परीक्षण नहीं कर रहे हैं। यह विशेष रूप से समस्याग्रस्त हो सकता है जब आप किसी उत्पादन प्रणाली पर समस्याओं की पहचान करने का प्रयास कर रहे हों। वर्चुअल इंडेक्स इस समस्या को हल करते हैं
  • वर्चुअल इंडेक्स का उद्देश्य एक इंडेक्स के अस्तित्व का अनुकरण करना है - वास्तव में एक पूर्ण इंडेक्स बनाए बिना
  • यह डेवलपर्स को एक व्याख्या योजना चलाने की अनुमति देता है जैसे कि इंडेक्स निर्माण पूरा होने की प्रतीक्षा किए बिना और अतिरिक्त डिस्क स्थान का उपयोग किए बिना इंडेक्स मौजूद है।
  • हम वर्चुअल इंडेक्स का विश्लेषण कर सकते हैं।
  • आप वर्चुअल इंडेक्स का पुनर्निर्माण नहीं कर सकते; यह एक ORA-8114 फेंकता है:"उपयोगकर्ता ने नकली अनुक्रमणिका को बदलने का प्रयास किया"
  • आप इंडेक्स को सामान्य इंडेक्स की तरह ही गिरा सकते हैं।
SQL> drop index <index_name>;

याद रखने के लिए महत्वपूर्ण बिंदु

(1) हमें इस सुविधा का उपयोग करने के लिए सत्र स्तर पर "_USE_NOSEGMENT_INDEXES" को सही पर सेट करने की आवश्यकता है
(2) इंडेक्स निर्माण स्क्रिप्ट के अंत में नो-सेगमेंट वाले हिस्से को जोड़कर वर्चुअल इंडेक्स बनाए जाते हैं

Oracle में वर्चुअल इंडेक्स के उपयोग को प्रदर्शित करने के लिए उदाहरण

(1) एक नमूना तालिका बनाएं, जैसे कि virtual_test_t

SQL> create table virtual_test_t as select * from dba_objects where rownum < 100000;
से चुनें * के रूप में तालिका virtual_test_t बनाएं

(2) तालिका से किसी भी मूल्य का चयन करें

SQL> select * from virtual_test_t where object_name = 'FND_PROFILE';

(3) चयन क्वेरी के लिए ओरेकल की व्याख्या योजना की जाँच करें।

SQL> set autotrace traceonly explain
SQL> select * from virtual_test_t where object_name = 'FND_PROFILE';
Execution Plan
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 8 | 1416 | 156 (2)| 00:00:02 |
|* 1 | TABLE ACCESS FULL| VIRTUAL_TEST_T | 8 | 1416 | 156 (2)| 00:00:02 |

(4) बनाई गई टेबल पर वर्चुअल इंडेक्स बनाएं।

SQL> create index test_index_v on virtual_test_t(object_name) nosegment;

याद रखें, वर्चुअल इंडेक्स बनाने के लिए आपको CREATE INDEX स्टेटमेंट में NOSEGMENT क्लॉज को निर्दिष्ट करना होगा।
उपरोक्त स्टेटमेंट को निष्पादित करके भी ध्यान दें, इंडेक्स सेगमेंट नहीं बनाया गया है।

(5) आप इसे निम्नलिखित के साथ देख सकते हैं:

SQL> set autotrace off
SQL> select index_name from dba_indexes where table_name = 'VIRTUAL_TEST_T' and index_name = 'TEST_INDEX_V';

no rows selected

SQL> col OBJECT_NAME format a20;
SQL> select object_name, object_type from dba_objects where object_name = 'TEST_INDEX_V';

तो, ऑब्जेक्ट डेटाबेस में मौजूद है, लेकिन हमारे पास इसके लिए सेगमेंट नहीं है।

(6) अब इसे चलाने के लिए जांचें कि क्या सूचकांक का उपयोग किया जा रहा है।

SQL> set autotrace traceonly explain
SQL> select * from virtual_test_t where object_name = 'FND_PROFILE';
Execution Plan
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 8 | 1416 | 156 (2)| 00:00:02 |
|* 1 | TABLE ACCESS FULL| VIRTUAL_TEST_T | 8 | 1416 | 156 (2)| 00:00:02 |

हम स्पष्ट रूप से देख सकते हैं कि सूचकांक का उपयोग नहीं किया जा रहा है।

(7) बनाए गए वर्चुअल इंडेक्स का उपयोग करने के लिए, हमें _USE_NOSEGMENT_INDEXES पैरामीटर को सही पर सेट करना होगा।

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

(8) अब, वही सेलेक्ट स्टेटमेंट चलाएँ।

SQL> select * from virtual_test_t where object_name = 'FND_PROFILE';
Execution Plan
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 8 | 1416 | 5 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| VIRTUAL_TEST_T | 8 | 1416 | 5 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | TEST_INDEX_V | 216 | | 1 (0)| 00:00:01 |

एक बार जब आप इस छिपे हुए पैरामीटर को सेट कर लेते हैं, तो ऑरेकल ऑप्टिमाइज़र आपके द्वारा इस टेबल पर बनाए गए वर्चुअल इंडेक्स का उपयोग करना शुरू कर देगा।
यदि आप इस क्वेरी को किसी अन्य सत्र से चलाते हैं, तो यह इस वर्चुअल इंडेक्स का उपयोग नहीं करेगा (जैसा कि हमने “alter” का उपयोग किया है। सेशन” स्टेटमेंट)।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle के किसी अन्य उपयोगकर्ता को संग्रहीत कार्यविधि पर अधिकार प्रदान करना

  2. Oracle में दोहरी तालिका क्या है?

  3. ऑरैकल में DATE को फ़ॉर्मेट करना

  4. Oracle SQL सिंटैक्स:उद्धरित पहचानकर्ता

  5. Oracle में SQL क्वेरी से परिणाम संयोजित करें