Concepts of Index (Create, drop)

एक index एक pointer structure है जो एक किताब के पीछे के index की तरह data retrieval को तेज़ करता है, Oracle को हर एक row scan करने से बचाते हुए।

10 min read · 11 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


Theory

50,000 किताबों की खोज

कल्पना कीजिए आप 'Mastering Oracle' नाम की एक textbook खोजने CampusLib campus library में घुसते हैं। librarian फ़र्श पर बेतरतीब पड़ी 50,000 किताबों के एक विशाल ढेर की ओर इशारा करता है। अपनी किताब पाने के लिए, आपको एक-एक करके हर एक किताब उठानी होगी जब तक एक match न मिल जाए। यह दर्दनाक process बिल्कुल वही है जो Oracle एक Full Table Scan के दौरान करता है जब एक column indexed नहीं होता। हम इसे कैसे ठीक कर सकते हैं?

Theory

Textbook का Index

एक database index को बिल्कुल अपनी BCA textbooks के पीछे के index pages की तरह सोचिए। अगर आप जानना चाहते हैं कि 'Subqueries' कहाँ समझाए गए हैं, आप सारे 400 pages नहीं पलटते। आप पीछे के index पर जाते हैं, 'Subqueries' खोजते हैं, page number 142 पाते हैं, और सीधे उस page पर मुड़ जाते हैं। database index वही करता है, page numbers को Oracle के internal unique pointers जिन्हें ROWIDs कहते हैं, से बदलते हुए।

Theory

एक Index क्या है?

औपचारिक रूप से, एक Index एक schema object है जिसमें एक table के indexed columns में दिखते हर value के लिए एक entry होती है और यह rows तक सीधी, तेज़ पहुँच देता है। Oracle SQL में, जब आप एक index बनाते हैं, Oracle अपने-आप एक B Tree structure बनाता है। यह structure column value को disk पर इसके बिल्कुल physical location, जिसे ROWID कहते हैं, से map करता है। यह data retrieval operations के दौरान पूरी table पढ़ने से बचाता है।

At a glance

Oracle SQL में data retrieval methods की तुलना

FeatureFull Table ScanIndex Scan
Search Methodऊपर से नीचे हर row scan करता हैROWID के ज़रिए सीधे मेल खाती rows पर कूदता है
Execution Speedtable का size बढ़ने पर धीमाबिजली सी तेज़, table size से स्वतंत्र
Resource Costज़्यादा CPU और disk IO खपतकम memory और disk IO खपत
Best Used Forrows का एक बड़ा हिस्सा retrieve करनाकुछ ख़ास rows retrieve करना (5 percent से कम)

Practical

CampusLib पर एक Index बनाना और Drop करना

-- Step 1: Let us speed up searches for book titles in CampusLib
CREATE INDEX idx_book_title 
ON books (title);

-- Step 2: Test a query that will now use this index
SELECT book_id, price 
FROM books 
WHERE title = 'Mastering Oracle';

-- Step 3: Remove the index if titles change too frequently
DROP INDEX idx_book_title;

This example runs in Gri-Learn on the web, where you can edit it and see the output.

Quiz

अगर आप books table के price column पर एक index बनाते हैं, तो जब आप एक INSERT statement चलाते हैं पर्दे के पीछे क्या होता है?

  1. Oracle नई row को table में insert करता है और अपने-आप index update करता है।
  2. Oracle table update करता है पर आपको हाथ से index rebuild करना होगा।
  3. Oracle INSERT रोकता है क्योंकि index table को lock कर देता है।
  4. INSERT तेज़ चलती है क्योंकि index ख़ाली space खोजने में मदद करता है।
Show the answer

Oracle नई row को table में insert करता है और अपने-आप index update करता है।

Oracle अपने-आप indexes maintain करता है। जब आप rows insert, update, या delete करते हैं, Oracle तुरंत index structure update करता है। पर, यह अतिरिक्त काम write operations को थोड़ा धीमा बनाता है, जो एक बड़ा university exam question जाल है!

Follow along

एक Query के दौरान Oracle एक Index कैसे इस्तेमाल करता है

  1. 1. Query Parsing Oracle optimizer WHERE clause जाँचता है कि search column के लिए एक index मौजूद है या नहीं।
  2. 2. Index Lookup Oracle ख़ास key value locate करने के लिए internal B Tree index structure में खोजता है।
  3. 3. ROWID Extraction index बिल्कुल ROWID देता है, जो disk पर मेल खाती row का physical address है।
  4. 4. Direct Row Fetch Oracle बाक़ी सारे records को छोड़कर ROWID इस्तेमाल करके सीधे block fetch करता है।

Watch out

Over Indexing का जाल

हर column index मत कीजिए! students अक्सर सोचते हैं ज़्यादा indexes का मतलब एक तेज़ database है। याद रखिए: जबकि एक index SELECT queries तेज़ करता है, यह INSERT, UPDATE, और DELETE statements धीमा करता है क्योंकि Oracle को लगातार index structure फिर से लिखनी होती है। indexes केवल उन columns पर बनाइए जो WHERE clauses या JOIN conditions में अक्सर इस्तेमाल होते हैं।

Think first

Oracle DROP INDEX Syntax जाँच

Mental Check: इस command को देखिए: 'DROP INDEX books.idx_book_title;'। क्या यह Oracle SQL में सफलतापूर्वक चलेगी? tap करने से पहले सोचिए।

Show the answer

नहीं, यह विफल होगी! Oracle SQL में, index names एक schema के भीतर unique होते हैं। सही syntax बस 'DROP INDEX idx_book_title;' है। कुछ अन्य SQL dialects जैसे SQLite के उलट, आप एक drop operation के दौरान table name prefix format इस्तेमाल नहीं करते।

Theory

छिपा हुआ Primary Key Index

क्या आप जानते हैं आप पहले से indexes बना रहे हैं? Oracle में, जब भी आप एक table पर एक PRIMARY KEY या UNIQUE constraint परिभाषित करते हैं (जैसे books में book_id), Oracle पर्दे के पीछे उस column के लिए अपने-आप एक unique index बना देता है। आपको primary key columns के लिए कभी हाथ से एक index बनाने की ज़रूरत नहीं!

Summary

Key takeaways

  • एक index एक वैकल्पिक database structure है जो data retrieval queries तेज़ करता है।
  • Oracle column values को सीधे unique ROWIDs से map करती एक विशेष tree structure इस्तेमाल करता है।
  • इसे बनाने के लिए CREATE INDEX और इसे delete करने के लिए DROP INDEX के बाद index name इस्तेमाल कीजिए।
  • indexes SELECT queries तेज़ करते हैं पर INSERT, UPDATE, और DELETE tasks पर overhead जोड़ते हैं।
  • Oracle PRIMARY KEY और UNIQUE columns के लिए अपने-आप unique indexes बनाता है।
  • Memory hook: Indexing bookmarking की तरह है: खोजने में तेज़, पुनर्व्यवस्थित करने में धीमा!

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Advanced SQL

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati

Concepts of Index (Create, drop) · Concepts of Relational Database Management Systems · Gri-Learn