SQL साक्षात्कार की तैयारी · पाठ

EXPLAIN प्लान पढ़ना

क्वेरी प्लान में स्कैन के प्रकार, जॉइन विधियों और लागत के अनुमानों को समझना

पाठ 1, कुल 4 में से13 चरण

EXPLAIN प्लान पढ़ना, CoddyKit पर SQL साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह SQL साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

साक्षात्कारकर्ता EXPLAIN के बारे में क्यों पूछते हैं

वरिष्ठ स्तर की चयन-चर्चा तक पहुँचने पर साक्षात्कारकर्ता क्वेरी लिखिए पूछना छोड़कर यह क्वेरी धीमी क्यों है पूछना शुरू करते हैं। इसका उत्तर देने वाला उपकरण EXPLAIN है।

EXPLAIN डेटाबेस की निष्पादन योजना दिखाता है: आपकी एसक्यूएल चलाने के लिए योजनाकार द्वारा चुनी गई चरण-दर-चरण रणनीति। इससे पता चलता है कि कौन-सी तालिकाएँ पढ़ी जाती हैं, उन्हें किस क्रम में जोड़ा जाता है और हर चरण की अनुमानित लागत कितनी है।

योजना पढ़ पाने से संकेत मिलता है कि आप केवल वाक्यविन्यास ही नहीं, बल्कि प्रणाली को भी समझते हैं। यही वह अंतर है जिसका उपयोग साक्षात्कारकर्ता मध्य-स्तर और वरिष्ठ स्तर के बीच करते हैं।

EXPLAIN और EXPLAIN ANALYZE

इसके दो रूप होते हैं और साक्षात्कारकर्ता इनके अंतर को बहुत महत्त्व देते हैं।

  • EXPLAIN क्वेरी चलाए बिना योजनाकार की अनुमानित योजना दिखाता है। यह तेज़ और सुरक्षित है।
  • EXPLAIN ANALYZE वास्तव में क्वेरी चलाता है और अनुमानों के साथ वास्तविक पंक्ति-संख्याएँ और समय भी दिखाता है।

सबसे उपयोगी बात अनुमानित पंक्तियों की वास्तविक पंक्तियों से तुलना करना है। बड़ा अंतर बताता है कि योजनाकार के आँकड़े खराब हैं और वह संभवतः गलत विकल्प चुन रहा है।

सावधान रहें: EXPLAIN ANALYZE क्वेरी को सचमुच चलाता है, इसलिए वापस किए गए लेन-देन में लपेटे बिना यह कोई भी INSERT या UPDATE कर देगा।

EXPLAIN ANALYZE
SELECT * FROM orders WHERE customer_id = 42;

वृक्ष को कैसे पढ़ें

योजना कोई सूची नहीं, बल्कि एक वृक्ष होती है। सबसे अधिक अंदर की ओर लिखे नोड वे पत्तियाँ हैं जो पहले चलती हैं; परिणाम ऊपर की ओर मूल नोड तक पहुँचते हैं, जहाँ अंतिम आउटपुट तैयार होता है।

इसे अंदर से बाहर की ओर पढ़ें: सबसे गहरे नोड को खोजें—निष्पादन वहीं से शुरू होता है। हर अभिभावक नोड अपने बच्चों द्वारा निकाली गई पंक्तियों का उपयोग करता है।

साक्षात्कार में इसे इसी तरह समझाएँ: पहले हम इस तालिका को पढ़ते हैं, वे पंक्तियाँ इस जोड़ में जाती हैं, जोड़ से क्रमबद्ध करने की प्रक्रिया को इनपुट मिलता है और क्रमबद्ध परिणाम सीमा तक पहुँचता है। वे आपसे यही नीचे से ऊपर की व्याख्या सुनना चाहते हैं।

योजना नोड की संरचना

Postgres योजना के प्रत्येक नोड में वही मुख्य संख्याएँ होती हैं:

  • लागत=0.00..35.50 प्रारंभिक लागत..कुल लागत, मनमानी योजनाकार इकाइयों में
  • पंक्तियाँ=1000 उत्पन्न होने वाली पंक्तियों की अनुमानित संख्या
  • चौड़ाई=64 बाइट में पंक्ति के अनुमानित औसत आकार

पहली लागत प्रारंभिक लागत होती है (पहली पंक्ति दिखाई देने से पहले किया जाने वाला काम, जैसे हैश तालिका बनाना)। दूसरी, सभी पंक्तियाँ लौटाने की कुल लागत होती है। कुल लागत जितनी अधिक होगी, योजनाकार का सापेक्ष खर्च का अनुमान उतना ही अधिक होगा।

Seq Scan on orders  (cost=0.00..35.50 rows=1000 width=64)

एक उदाहरण सहित समझना

एक सरल फ़िल्टर वाली क्वेरी पर विचार करें। नीचे दी गई योजना एक ही पंक्ति में पूरी कहानी बता देती है।

यह अनुक्रमिक स्कैन (पूरी तालिका पढ़ना) है, जो orders पर status = 'shipped' फ़िल्टर लागू करता है। योजनाकार का अनुमान है कि 1000 पंक्तियाँ मेल खाएँगी।

यदि orders में 1 करोड़ पंक्तियाँ हों और केवल 1000 पंक्तियाँ मेल खाएँ, तो साक्षात्कारकर्ता आपसे यह कहने की अपेक्षा करता है: यहाँ अनुक्रमिक स्कैन व्यर्थ है; स्थिति पर (या किसी अधिक चयनात्मक स्तंभ पर) इंडेक्स लगाने से पूरी तालिका पढ़ने से बचा जा सकेगा।

EXPLAIN SELECT * FROM orders WHERE status = 'shipped';

Seq Scan on orders  (cost=0.00..18334.00 rows=1000 width=64)
  Filter: (status = 'shipped'::text)

अनुमानित बनाम वास्तविक पंक्तियाँ

EXPLAIN ANALYZE के साथ आपको कोष्ठकों में वास्तविक संख्याएँ भी मिलती हैं।

उदाहरण देखें: योजनाकार ने 1000 पंक्तियों का अनुमान लगाया, लेकिन वास्तव में 480000 पंक्तियाँ मिलीं। यह वास्तविक संख्या से 480 गुना कम अनुमान है। योजनाकार ने कम पंक्तियाँ मानकर अपनी रणनीति चुनी, इसलिए वास्तविक डेटा के लिए उसका चुनाव संभवतः गलत है।

साक्षात्कार में यह अंतर आपका मुख्य निदान होना चाहिए: आँकड़े पुराने हैं, तालिका पर ANALYZE चलाइए, फिर योजनाकार संभवतः बेहतर योजना चुनेगा।

Seq Scan on orders
  (cost=0.00..18334.00 rows=1000 width=64)
  (actual time=0.02..210.4 rows=480000 loops=1)

loops=N का अर्थ

loops का मान अपेक्षा से अधिक महत्वपूर्ण होता है। यह बताता है कि किसी नोड को कितनी बार चलाया गया।

यह नेस्टेड लूप जॉइन की अंदरूनी तरफ दिखाई देता है: अंदरूनी नोड प्रत्येक बाहरी पंक्ति के लिए एक बार चलता है। यदि loops=480000 है, तो वह अंदरूनी चरण 4,80,000 बार चला।

महत्वपूर्ण बात: दिखाया गया प्रति-पंक्ति समय और पंक्ति संख्या प्रति लूप होती है। वास्तविक कुल प्राप्त करने के लिए आपको इसे loops से गुणा करना होगा। जो नोड प्रति लूप 0.004ms पर सस्ता दिखता है, वह 480000 लूप में लगभग 2 सेकंड ले सकता है।

Index Scan using idx_cust on orders
  (actual time=0.003..0.004 rows=1 loops=480000)

लागत सापेक्ष होती है, मिलीसेकंड में नहीं

एक आम गलती यह है: उम्मीदवार cost=18334 पढ़कर कहते हैं, इसमें 18 सेकंड लगेंगे। यह गलत है।

लागत मनमानी योजनाकार इकाइयों में होती है, जिन्हें इस तरह निर्धारित किया जाता है कि एक क्रमिक पृष्ठ-पठन का मान 1.0 हो। इसका अर्थ केवल एक योजना की दूसरी योजना से तुलना करने में है, वास्तविक घड़ी-समय बताने में नहीं।

वास्तविक समय जानने के लिए आपको EXPLAIN ANALYZE और इसके actual time मान चाहिए, जो मिलीसेकंड में मापे जाते हैं। साक्षात्कार में यह बात स्पष्ट रूप से कहिए; इससे पता चलता है कि आप इस मापदंड को वास्तव में समझते हैं।

जॉइन योजना पढ़ना

यह दो तालिकाओं वाली योजना है। इसे नीचे से ऊपर की ओर पढ़िए।

पहले दो स्कैन orders और customers से पंक्तियाँ जुटाते हैं। वे एक हैश जॉइन को इनपुट देते हैं: एक तरफ हैश बनाया जाता है और दूसरी तरफ उससे मिलान किया जाता है। जॉइन का आउटपुट फिर अंतिम परिणाम को इनपुट देता है।

ध्यान दें कि इंडेंटेशन संरचना दिखाता है: दोनों स्कैन हैश जॉइन के नीचे हैं। साक्षात्कारकर्ता चाहता है कि आप जॉइन विधि (यहाँ हैश) और यह पहचानें कि किस तालिका का हैश बनाया जा रहा है (आमतौर पर छोटी तालिका का)।

Hash Join  (cost=30.0..520.0 rows=900 width=72)
  Hash Cond: (o.customer_id = c.id)
  ->  Seq Scan on orders o  (cost=0..400 rows=10000)
  ->  Hash  (cost=18..18 rows=500)
        ->  Seq Scan on customers c  (cost=0..18 rows=500)

जिन चेतावनी संकेतों का उल्लेख करें

किसी भी योजना में इन चेतावनी संकेतों को पहचानने का अभ्यास कीजिए:

  • बहुत बड़ी तालिका पर अनुक्रमिक स्कैन और चयनात्मक फ़िल्टर, जहाँ इंडेक्स मदद कर सकता था।
  • अनुमानित पंक्तियाँ वास्तविक पंक्तियों से बहुत अलग, यानी आँकड़े पुराने हैं।
  • बहुत अधिक लूप वाली नेस्टेड लूप जो बड़ी तालिका पर चल रही हो, जहाँ अक्सर अंदरूनी जॉइन कुंजी पर इंडेक्स गायब होता है।
  • डिस्क पर स्पिल होने वाली सॉर्ट या हैश (जिसे Disk उपयोग के रूप में दिखाया जाता है), यानी work_mem बहुत छोटा है।
  • फ़िल्टर द्वारा हटाई गई पंक्तियाँ बहुत अधिक हों, यानी आपने तालिका का अधिकांश भाग पढ़कर हटा दिया।

आउटपुट प्रारूप और BUFFERS

योजनाएँ कई प्रारूपों में आती हैं। डिफ़ॉल्ट TEXT वही है जिसे आप साक्षात्कार में पढ़कर सुनाते हैं। लेकिन आप संरचित आउटपुट भी माँग सकते हैं।

EXPLAIN (FORMAT JSON) या FORMAT YAML ऐसे योजनाएँ बनाता है जिन्हें मशीनें पढ़ सकती हैं और उपकरण तथा डैशबोर्ड पार्स कर सकते हैं। आपको इन्हें हाथ से देखने की ज़रूरत बहुत कम पड़ती है, लेकिन इनके अस्तित्व की जानकारी होना वरिष्ठ स्तर की समझ का अच्छा संकेत है।

कोष्ठकों में विकल्प जोड़ें: EXPLAIN (ANALYZE, BUFFERS)। BUFFERS विकल्प कैश हिट और डिस्क पठन की तुलना बताता है, जो इनपुट/आउटपुट-सीमित क्वेरियों का निदान करने में बहुत उपयोगी है।

EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM orders WHERE customer_id = 42;

त्वरित जाँच

साक्षात्कारकर्ता आपको EXPLAIN ANALYZE का एक नोड दिखाता है, जिसमें लागत वाले भाग में rows=1000 लेकिन actual ... rows=480000 है। सबसे संभावित निदान क्या है?

पुनरावलोकन

अब आप किसी योजना को वरिष्ठ डेवलपर की तरह पढ़ सकते हैं:

  • EXPLAIN अनुमान लगाता है, जबकि EXPLAIN ANALYZE योजना चलाकर मापता है।
  • वृक्ष को नीचे से ऊपर की ओर पढ़िए; पत्तियाँ पहले चलती हैं और मूल नोड आउटपुट देता है।
  • हर नोड में लागत (सापेक्ष इकाइयाँ), पंक्तियाँ और चौड़ाई दिखाई जाती है; actual time वास्तविक मिलीसेकंड आँकड़ा है।
  • loops प्रति-लूप संख्याओं को गुणा करता है, इसलिए नेस्टेड लूप पर ध्यान दीजिए।
  • अनुमानित और वास्तविक पंक्तियों का अंतर आपका सबसे महत्वपूर्ण निदान संकेत है।

योजना को ज़ोर से समझाकर पढ़िए और चेतावनी संकेतों का उल्लेख कीजिए; यही साक्षात्कार में प्रभावी प्रदर्शन है।

शुरुआत निःशुल्क

एआई शिक्षक के साथ SQL सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
30
पाठ
120

अक्सर पूछे जाने वाले प्रश्न

क्या “EXPLAIN प्लान पढ़ना” पाठ निःशुल्क है?

हाँ—“EXPLAIN प्लान पढ़ना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और SQL साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“EXPLAIN प्लान पढ़ना” में मैं क्या सीखूँगा?

क्वेरी प्लान में स्कैन के प्रकार, जॉइन विधियों और लागत के अनुमानों को समझना आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ SQL साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या SQL साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर SQL साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“EXPLAIN प्लान पढ़ना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस SQL साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर SQL साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. EXPLAIN प्लान पढ़ना
  2. Seq Scan बनाम Index Scan बनाम Index-Only
  3. जॉइन एल्गोरिदम: Nested Loop, Hash, Merge
  4. धीमी क्वेरी पहचानना और ठीक करना
← SQL साक्षात्कार की तैयारी पर वापस जाएँ