मुख्य सामग्री पर जाएं
मॉड्यूल 10 · पाठ 1 का 4पाठ्यक्रम में 37/57~15 min
मॉड्यूल पाठ (1/4)

सूचकांक और बी-पेड़

एक डेटाबेस एक सेकंड के अंशों में लाखों पंक्तियों के बीच एक एकल रिकॉर्ड कैसे ढूंढ सकता है?

डिफ़ॉल्ट रूप से, जब हम SELECT * FROM customers WHERE city = 'Milano' पूछते हैं, तो पोस्टग्रेज को अनुक्रमिक स्कैन करना होता है: यह भौतिक रूप से डिस्क पंक्ति से पूरी तालिका को पंक्ति दर पंक्ति पढ़ता है, प्रत्येक शहर की तुलना "मिलानो" से करता है। जब किसी तालिका में लाखों रिकॉर्ड होते हैं, तो यह प्रक्रिया प्रदर्शन को ख़राब कर देती है।

इन बाधाओं का मुख्य संरचनात्मक उत्तर सूचकांक हैं।

सूचकांक (बी-पेड़)

सूचकांक बिल्कुल एक बड़ी किताब के पीछे विश्लेषणात्मक सूचकांक की तरह काम करते हैं। यह जानने के लिए कि इसमें "मिलानो" के बारे में कहाँ बात की गई है, पूरी किताब पढ़ने के बजाय, हम पिछले पन्नों को देखते हैं जहाँ "मिलानो" शब्द हमें [p. 45, 114, 230] पर पुनर्निर्देशित करता है। डेटाबेस, पर्दे के पीछे, इस अलग, बहुत कॉम्पैक्ट डेटा संरचना (अक्सर एक "बी-ट्री") का निर्माण करते हैं, जिसे प्रश्न में कॉलम या कॉलम द्वारा क्रमबद्ध किया जाता है, जिसमें मिलान पंक्तियों के भौतिक भंडारण के लिए सीधे संकेतक होते हैं।

SQL
-- Creare un indice semplice
CREATE INDEX idx_customers_city ON customers(city);

यह एकल ऑपरेशन पोस्टग्रेज़ इंजन को ट्रिगर करता है, जो पृष्ठभूमि में सभी city मानों को निकालेगा और अनुक्रमित करेगा। एक बार पूरा होने पर, प्रत्येक आगामी SELECT ... WHERE city = '...' उड़ान भरेगा!

प्राथमिक कुंजी और विशिष्टता

क्या आप जानते हैं कि प्राथमिक कुंजी (PRIMARY KEY) और UNIQUE कुंजी नियम गुप्त रूप से हुड के तहत इंडेक्स का उपयोग करते हैं? चूँकि DB को यह सुनिश्चित करना चाहिए कि पंक्तियों को सम्मिलित या परिवर्तित करते समय किसी ईमेल या आईडी को कभी भी डुप्लिकेट नहीं किया जाता है, PostgreSQL स्वचालित रूप से उनके शीर्ष पर एक अंतर्निहित बी-ट्री इंडेक्स बनाता है: इस तरह विशिष्टता जांच में माइक्रोसेकंड लगते हैं।

यही कारण है कि ID फ़ील्ड पर जॉइन अविश्वसनीय रूप से अच्छा प्रदर्शन करते हैं।

एक सूचकांक छोड़ना

यदि आपको पता चलता है कि भारी प्रश्न बदल गए हैं और किसी सूचकांक से कभी परामर्श नहीं किया जाता है, तो इसे नष्ट करना और महत्वपूर्ण स्थान पुनः प्राप्त करना बुद्धिमानी है:

SQL
DROP INDEX idx_customers_city;

आपकी बारी

व्यायाम#sql.m10.l1.e1
प्रयास: 0लोड हो रहा है...

हमारे ई-कॉमर्स में हम डैशबोर्ड के माध्यम से देखते हैं कि हम अक्सर ग्राहकों को राष्ट्रीयता (ग्राहकों में देश कॉलम) के आधार पर फ़िल्टर करते हैं। \nदेश कॉलम पर एक नया बेस इंडेक्स बनाएं और इसे 'idx_customers_country' नाम दें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

टेबल_नाम(कॉलम_नाम) पर क्रिएट इंडेक्स इंडेक्स_नाम का उपयोग करें;

3 प्रयासों के बाद समाधान उपलब्ध है

द्वितीयक अद्वितीय अनुक्रमणिका की खोज

व्यायाम#sql.m10.l1.e2
प्रयास: 0लोड हो रहा है...

तार्किक इरादे को स्पष्ट और लागू करते हुए, निर्माण के समय एक अद्वितीय बाधा का अनुकरण करने और लुकअप को तेज करने के लिए बी-ट्री इंडेक्स का भी उपयोग किया जा सकता है।\n\nएक नया इंडेक्स बनाएं जहां आप यूनिक कीवर्ड घोषित करते हैं। इसे परिभाषित करें ताकि यह अन्य उपयोगकर्ताओं से किसी भी अवांछित डुप्लिकेट साइन-अप को रोक सके, 'ग्राहकों' के 'ईमेल' कॉलम पर विशिष्टता को मजबूर कर सके, और इसे 'idx_unique_email_customer' नाम दें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

टेबल (कॉलम) पर क्रिएट यूनिक इंडेक्स इंडेक्स_नाम लिखें;

3 प्रयासों के बाद समाधान उपलब्ध है