क्रमिक स्कैन बनाम इंडेक्स स्कैन
जानें कि क्रमिक स्कैन कब पर्याप्त है, इंडेक्स स्कैन कब आवश्यक है, और प्लानर निर्णय कैसे लेता है
क्रमिक स्कैन बनाम इंडेक्स स्कैन, CoddyKit पर SQL Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह SQL Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। SQL Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
पंक्तियाँ खोजने के दो तरीके
डेटाबेस में पंक्तियाँ पढ़ने की दो मूल रणनीतियाँ होती हैं:
- अनुक्रमिक स्कैन — तालिका का हर पृष्ठ पढ़ना
- इंडेक्स स्कैन — इंडेक्स में आगे बढ़ना और मेल खाने वाली पंक्तियाँ लाना
अनुक्रमिक स्कैन कब सही है
यदि आपको वैसे भी तालिका की अधिकांश पंक्तियाँ चाहिए, तो इंडेक्स पढ़ने और हर मेल खाने वाली पंक्ति लाने की तुलना में पूरी तालिका स्कैन करना सस्ता होता है। मोटे तौर पर: लगभग 10–20% से अधिक पंक्तियाँ → अनुक्रमिक स्कैन बेहतर रहता है।
इंडेक्स स्कैन कब बेहतर रहता है
चयनात्मक क्वेरियों में, जहाँ पंक्तियों का छोटा-सा अंश चाहिए, इंडेक्स लाभ देता है:
EXPLAIN SELECT * FROM users WHERE id = 42;
-- Index Scan using users_pkey (cost=0.43..8.45 rows=1)
EXPLAIN SELECT * FROM users WHERE active;
-- Seq Scan on users (cost=0.00..15000.00 rows=950000)
-- (because most users are active)इंडेक्स स्कैन बनाम केवल-इंडेक्स स्कैन
कभी-कभी इंडेक्स में ही आपके लिए आवश्यक सभी कॉलम होते हैं—तालिका से पंक्तियाँ लाने की ज़रूरत नहीं पड़ती। इसे केवल-इंडेक्स स्कैन कहते हैं:
CREATE INDEX users_email_id_idx ON users(id) INCLUDE (email);
EXPLAIN SELECT email FROM users WHERE id = 42;
-- Index Only Scan using users_email_id_idxबिटमैप इंडेक्स स्कैन
मध्यम चयनात्मकता के लिए PostgreSQL मेल खाने वाली पंक्तियों का बिटमैप बना सकता है और फिर उन्हें भौतिक क्रम में ला सकता है—यह यादृच्छिक इनपुट/आउटपुट से तेज़ होता है:
EXPLAIN SELECT * FROM orders WHERE status = 'pending';
-- Bitmap Heap Scan on orders
-- Recheck Cond: (status = 'pending')
-- -> Bitmap Index Scan on orders_status_idxप्लानर अनुक्रमिक स्कैन क्यों चुनता है
सामान्य कारण:
- फ़िल्टर किए गए कॉलम पर कोई इंडेक्स नहीं है
- इंडेक्स का उपयोग नहीं किया जा सकता (कॉलम पर फ़ंक्शन, OR क्लॉज़, प्रकारों में असंगति)
- अपेक्षित पंक्तियों की संख्या इतनी अधिक है कि इंडेक्स उपयोगी नहीं रहेगा
- आँकड़े पुराने हैं और प्लानर चयनात्मकता का गलत अनुमान लगा रहा है
इंडेक्स का उपयोग बलपूर्वक कराना (सावधानी से)
आप PostgreSQL को सीधे संकेत नहीं दे सकते। इसके बजाय:
- आँकड़े ताज़ा करने के लिए ANALYZE चलाएँ
- सही इंडेक्स जोड़ें
- सत्र के विकल्प सेट करें: निदान के लिए
SET enable_seqscan = off;(प्रोडक्शन के लिए नहीं)
इंडेक्स-अनुकूल शर्तें
इंडेक्स के उपयोगी होने के लिए WHERE में सीधे इंडेक्स किए गए कॉलम की तुलना होनी चाहिए, यानी वह "इंडेक्स-अनुकूल" होना चाहिए:
-- GOOD:
WHERE created_at >= '2024-01-01'
-- BAD (function on the column):
WHERE date_trunc('day', created_at) = '2024-01-01'
-- BAD (cast):
WHERE created_at::DATE = '2024-01-01'
-- FIX: add a functional index, or rewrite with range.संयुक्त इंडेक्स का क्रम
(a, b) वाला इंडेक्स केवल a और a AND b वाली क्वेरियों में मदद करता है, लेकिन केवल b वाली क्वेरी में नहीं।
इंडेक्स का आकार महत्वपूर्ण है
अक्सर उपयोग होने वाली कुंजियों वाला छोटा बी-ट्री इंडेक्स पूरी तरह मेमोरी में रह सकता है, जबकि बड़ा इंडेक्स शायद न रह पाए। छोटे इंडेक्स तेज़ होते हैं।
निष्पादन-योजना की पुष्टि करें
इंडेक्स जोड़ने के बाद EXPLAIN ANALYZE चलाकर पुष्टि करें कि प्लानर वास्तव में उसका उपयोग कर रहा है। यदि नहीं, तो कारण की जाँच करें।
पुनरावलोकन
अनुक्रमिक स्कैन और इंडेक्स स्कैन का चुनाव चयनात्मकता पर निर्भर करता है।
- चयनात्मक फ़िल्टर → इंडेक्स स्कैन
- तालिका का अधिकांश भाग → अनुक्रमिक स्कैन
- बीच की स्थिति के लिए बिटमैप स्कैन
- इंडेक्स-अनुकूल शर्तों पर ध्यान दें
त्वरित जाँच
PostgreSQL मौजूदा इंडेक्स के बजाय अनुक्रमिक स्कैन क्यों चुन सकता है?
एआई शिक्षक के साथ SQL सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 46
- पाठ
- 183
अक्सर पूछे जाने वाले प्रश्न
क्या “क्रमिक स्कैन बनाम इंडेक्स स्कैन” पाठ निःशुल्क है?
हाँ—“क्रमिक स्कैन बनाम इंडेक्स स्कैन” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और SQL Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। SQL Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“क्रमिक स्कैन बनाम इंडेक्स स्कैन” में मैं क्या सीखूँगा?
जानें कि क्रमिक स्कैन कब पर्याप्त है, इंडेक्स स्कैन कब आवश्यक है, और प्लानर निर्णय कैसे लेता है आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ SQL Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या SQL Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर SQL Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“क्रमिक स्कैन बनाम इंडेक्स स्कैन” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस SQL Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर SQL Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- EXPLAIN और EXPLAIN ANALYZE पढ़ना
- क्रमिक स्कैन बनाम इंडेक्स स्कैन
- हैश जॉइन बनाम मर्ज जॉइन बनाम नेस्टेड लूप
- धीमी क्वेरी पहचानना और ठीक करना