कवरिंग इंडेक्स और इंडेक्स-ओनली स्कैन
स्तंभ शामिल करना ताकि क्वेरी को तालिका के हीप तक कभी न जाना पड़े
कवरिंग इंडेक्स और इंडेक्स-ओनली स्कैन, CoddyKit पर कोडिंग साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह कोडिंग साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
हीप से प्राप्ति की याद
आपने पहले सीखा था कि सामान्य बी-ट्री में केवल इंडेक्स किए गए कॉलम और पंक्ति-सूचक संग्रहीत होते हैं। इसलिए इंडेक्स से मिलान मिल जाने के बाद भी इंजन को अन्य कॉलम पढ़ने के लिए तालिका तक जाना पड़ता है। इसी को हीप से प्राप्ति कहते हैं, और यही वह लागत है जिसे कवरिंग इंडेक्स समाप्त करने के लिए बनाया जाता है।
साक्षात्कारकर्ता कवरिंग इंडेक्स के बारे में यह देखने के लिए पूछते हैं कि क्या आप समझते हैं कि कोई इंडेक्स तालिका को छुए बिना किसी क्वेरी का पूरा उत्तर क्यों दे सकता है।
‘कवरिंग’ का अर्थ
जब क्वेरी के लिए आवश्यक हर कॉलम—SELECT, WHERE, ORDER BY और GROUP BY में उपयोग किए गए कॉलम—स्वयं इंडेक्स में मौजूद हो, तो इंडेक्स उस क्वेरी को कवर करता है।
ऐसा होने पर इंजन केवल इंडेक्स पढ़ता है और तालिका तक कभी नहीं जाता। PostgreSQL इसे केवल-इंडेक्स स्कैन कहता है; एसक्यूएल सर्वर और अन्य सिस्टम इसे कवरिंग इंडेक्स कहते हैं। इससे पृष्ठों को कम पढ़ना पड़ता है और क्वेरी तेज़ चलती हैं।
उदाहरण: कवर की गई क्वेरी
मान लीजिए कि किसी क्वेरी को केवल customer_id और order_date चाहिए। ठीक इन्हीं कॉलमों पर बना संयुक्त इंडेक्स क्वेरी की माँगी गई हर चीज़ रखता है, इसलिए इसका उत्तर केवल इंडेक्स से दिया जा सकता है।
CREATE INDEX idx_orders_cust_date
ON orders (customer_id, order_date);
-- Covered: both selected columns are in the index
SELECT customer_id, order_date
FROM orders
WHERE customer_id = 42;एक अतिरिक्त कॉलम कवरेज समाप्त कर देता है
इंडेक्स में मौजूद न होने वाला कोई कॉलम जोड़ने पर कवरेज समाप्त हो जाती है और इंजन को उसे पाने के लिए हीप से प्राप्ति करनी पड़ती है।
यहाँ total इंडेक्स में नहीं है। इसलिए भले ही customer_id खोज को आगे बढ़ाता हो, हर मिलती हुई पंक्ति में total पढ़ने के लिए हीप से प्राप्ति करनी पड़ती है।
-- NOT covered: total is not in the index, forces heap fetches
SELECT customer_id, order_date, total
FROM orders
WHERE customer_id = 42;INCLUDE खंड
आप total को चौथे कुंजी-कॉलम के रूप में जोड़ सकते हैं, लेकिन यदि आप इस पर कभी फ़िल्टर या क्रमबद्धता नहीं करते, तो ट्री के क्रमबद्ध क्रम में इसके लिए जगह रखना व्यर्थ है। अधिक साफ़ उपाय INCLUDE है, जिसे PostgreSQL और SQL Server समर्थित करते हैं। यह अतिरिक्त कॉलमों को इंडेक्स की पत्ती में ही पेलोड के रूप में रखता है, क्रमबद्धता-कुंजी के हिस्से के रूप में नहीं।
अब इंडेक्स के खोजे जा सकने वाले हिस्से को अनावश्यक रूप से बड़ा किए बिना क्वेरी कवर हो जाती है।
CREATE INDEX idx_orders_cust_date_inc
ON orders (customer_id, order_date)
INCLUDE (total);
-- Now covered: total is carried in the leaf
SELECT customer_id, order_date, total
FROM orders
WHERE customer_id = 42;कुंजी कॉलम बनाम शामिल किए गए कॉलम
एक सटीक अंतर जो साक्षात्कारकर्ताओं को प्रभावित करता है:
- कुंजी कॉलम क्रमबद्धता का क्रम तय करते हैं और खोज तथा सीमा-स्कैन के लिए उपयोग किए जा सकते हैं। इन पर सबसे-बाएँ उपसर्ग नियम लागू होता है।
- शामिल किए गए कॉलम केवल पत्तियों में अतिरिक्त डेटा के रूप में रखे जाते हैं। इन्हें खोजा नहीं जा सकता, लेकिन ये इंडेक्स को अधिक क्वेरी कवर करने देते हैं।
सामान्य नियम: जिन कॉलमों पर आप फ़िल्टर या क्रमबद्ध करते हैं, उन्हें कुंजी में रखें; जिन्हें केवल परिणाम में लौटाते हैं, उन्हें INCLUDE में रखें।
MySQL/InnoDB: क्लस्टर्ड विशेषता
विभिन्न डेटाबेस प्रणालियों की समझ दिखाइए। InnoDB (MySQL) तालिकाएँ प्राथमिक कुंजी के आधार पर क्लस्टर्ड होती हैं: द्वितीयक इंडेक्स में प्राथमिक कुंजी के कॉलम अपने-आप शामिल होते हैं। इसलिए द्वितीयक इंडेक्स उन सभी क्वेरी को स्वतः कवर करता है जो केवल इंडेक्स किए गए कॉलम और प्राथमिक-कुंजी कॉलम चुनती हैं। किसी INCLUDE खंड की आवश्यकता नहीं होती, क्योंकि MySQL में INCLUDE नहीं है।
कवरिंग की अवधारणा सार्वभौमिक है; वाक्य-विन्यास और बिना अतिरिक्त लागत के मिलने वाले कॉलम इंजन के अनुसार बदलते हैं।
केवल-इंडेक्स स्कैन का सत्यापन
EXPLAIN से कवरेज का प्रमाण दीजिए। PostgreSQL में योजना का नोड केवल-इंडेक्स स्कैन पढ़ता है, Index Scan नहीं। EXPLAIN (ANALYZE) में Heap Fetches: 0 पर ध्यान दें; यह निर्णायक संकेत है कि तालिका तक कोई पहुँच नहीं हुई।
यदि आपको केवल-इंडेक्स स्कैन की अपेक्षा थी, लेकिन हीप से प्राप्तियों के साथ Index Scan दिखाई दे रहा है, तो चुना गया कोई कॉलम इंडेक्स में मौजूद नहीं है।
EXPLAIN (ANALYZE)
SELECT customer_id, order_date, total
FROM orders
WHERE customer_id = 42;
-- Look for: Index Only Scan ... Heap Fetches: 0पोस्टग्रेज़ के दृश्यता-मानचित्र की सावधानी
पोस्टग्रेज़ की एक सूक्ष्म बात, जिसके लिए अतिरिक्त अंक मिल सकते हैं: यदि कोई पृष्ठ दृश्यता मानचित्र में सभी-दृश्य चिह्नित नहीं है, तो केवल-इंडेक्स स्कैन भी हीप तक पहुँच सकता है। बड़े पैमाने पर अद्यतनों के बाद VACUUM चलाइए, ताकि दृश्यता मानचित्र अद्यतन रहे। अन्यथा Heap Fetches बढ़ते हैं और ‘केवल-इंडेक्स’ का लाभ घट जाता है।
-- Keeps the visibility map fresh so index-only scans stay heap-free
VACUUM ANALYZE orders;चौड़ा कवरिंग इंडेक्स कब NOT बनाना चाहिए
कवरिंग इंडेक्स निःशुल्क नहीं होते। INCLUDE में बहुत-से कॉलम भरने से इंडेक्स बड़ा हो जाता है, कैश खपता है और लेखन धीमा होता है, क्योंकि हर संबंधित लेखन इंडेक्स को अद्यतन करता है। बताने योग्य संतुलन:
- अधिक उपयोग वाली, सीमित दायरे की और बार-बार पढ़ी जाने वाली क्वेरी के लिए बहुत अच्छे।
- हर कॉलम को ‘एहतियातन’ रखने की जगह बनाना खराब है।
महत्वपूर्ण क्वेरी को कवर कीजिए, पूरी पंक्ति को नहीं।
साक्षात्कार में इसे कैसे कहें
एक साफ़ सारांश:
'एक कवरिंग इंडेक्स में क्वेरी द्वारा उपयोग किया जाने वाला हर कॉलम होता है, इसलिए इंजन उसका उत्तर केवल इंडेक्स से देता है—यह एक केवल-इंडेक्स स्कैन होता है और हीप से प्राप्ति छूट जाती है। मैं खोजे गए कॉलम कुंजी में और केवल लौटाए जाने वाले कॉलम INCLUDE में रखता हूँ, EXPLAIN ANALYZE से सुनिश्चित करता हूँ कि हीप से प्राप्तियाँ शून्य हों, और लेखन की गति बचाने के लिए इंडेक्स को छोटा रखता हूँ।'
त्वरित जाँच
कवरेज और हर कॉलम के लिए सही स्थान के बारे में तर्क कीजिए।
पुनरावलोकन: कवरिंग इंडेक्स
मुख्य बातें:
- जब इंडेक्स में क्वेरी के लिए आवश्यक हर कॉलम मौजूद हो, तो इंडेक्स क्वेरी को कवर करता है और हीप से प्राप्ति के बिना केवल-इंडेक्स स्कैन संभव बनाता है।
- कुंजी कॉलम खोज को आगे बढ़ाते हैं और सबसे-बाएँ उपसर्ग नियम का पालन करते हैं; INCLUDE कॉलम केवल पत्ती-स्तर का पेलोड होते हैं और कवरेज देते हैं।
- InnoDB के द्वितीयक इंडेक्स में प्राथमिक कुंजी अपने-आप शामिल होती है।
EXPLAIN (ANALYZE)से सत्यापित कीजिए औरHeap Fetchesपर ध्यान दें; पोस्टग्रेज़ मेंVACUUMको अद्यतन रखें।- लेखन के प्रदर्शन को सुरक्षित रखने के लिए कवरिंग इंडेक्स को छोटा रखें।
अगला विषय: दूसरा पहलू—जब इंडेक्स वास्तव में नुकसान पहुँचाते हैं।
एआई शिक्षक के साथ कोडिंग साक्षात्कार की तैयारी सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 90
- पाठ
- 360
अक्सर पूछे जाने वाले प्रश्न
क्या “कवरिंग इंडेक्स और इंडेक्स-ओनली स्कैन” पाठ निःशुल्क है?
हाँ—“कवरिंग इंडेक्स और इंडेक्स-ओनली स्कैन” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“कवरिंग इंडेक्स और इंडेक्स-ओनली स्कैन” में मैं क्या सीखूँगा?
स्तंभ शामिल करना ताकि क्वेरी को तालिका के हीप तक कभी न जाना पड़े आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ कोडिंग साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या कोडिंग साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर कोडिंग साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“कवरिंग इंडेक्स और इंडेक्स-ओनली स्कैन” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस कोडिंग साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर कोडिंग साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- B-Tree इंडेक्स और उनका लाभ
- संयुक्त इंडेक्स में स्तंभों का क्रम
- कवरिंग इंडेक्स और इंडेक्स-ओनली स्कैन
- इंडेक्स कब नुकसान पहुँचाते हैं: लेखन और चयनात्मकता