CTE बनाम सबक्वेरी बनाम अस्थायी तालिका
भौतिकीकरण, पुनः उपयोग और optimizer के व्यवहार के बीच समझौते समझें
CTE बनाम सबक्वेरी बनाम अस्थायी तालिका, CoddyKit पर SQL साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह SQL साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
तर्क को चरणबद्ध करने के तीन तरीके
जब किसी क्वेरी को मध्यवर्ती परिणाम की आवश्यकता होती है, तो आपके पास तीन सामान्य साधन होते हैं: उप-क्वेरी, CTE और अस्थायी तालिका। साक्षात्कारकर्ता आपसे इनकी तुलना करने को कहते हैं, क्योंकि आपका चुनाव बताता है कि आप भौतिकीकरण और अनुकूलक के व्यवहार को समझते हैं या नहीं।
यह पाठ एक ऐसा निर्णय-ढाँचा तैयार करता है जिसे आप दबाव में भी स्पष्ट रूप से बता सकें।
उप-क्वेरी
उप-क्वेरी, किसी दूसरी क्वेरी के भीतर रखी गई अंतर्निहित क्वेरी होती है, जो अक्सर FROM, WHERE या SELECT में आती है। यह उसी कथन का हिस्सा होती है और अनुकूलक इसे एक ही इकाई के रूप में देखता है।
- नाम की आवश्यकता नहीं होती (व्युत्पन्न तालिकाओं के लिए उपनाम आवश्यक होता है)।
- अनुकूलक इसे बाहरी क्वेरी में मिलाने के लिए स्वतंत्र होता है।
- बहुत गहराई तक अंदर रखने पर यह लंबी और पढ़ने में कठिन हो जाती है।
SELECT *
FROM (
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
) t
WHERE t.total > 1000;CTE
CTE, WITH खंड में लिखी गई नामित उप-क्वेरी होती है, जिसका दायरा एक कथन तक सीमित रहता है। यह बहुत गहराई तक अंदर रखी गई उप-क्वेरी से अधिक पठनीय होती है और इसे कई बार संदर्भित किया जा सकता है।
- नामित होने के कारण इसका उद्देश्य स्पष्ट रहता है।
- एक ही कथन में इसका एक से अधिक बार संदर्भ लिया जा सकता है।
- फिर भी इसका दायरा एक ही कथन तक रहता है और उसके बाद यह समाप्त हो जाती है।
WITH spend AS (
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
)
SELECT *
FROM spend
WHERE total > 1000;अस्थायी तालिका
अस्थायी तालिका एक वास्तविक, भौतिक तालिका होती है, जो सत्र (या लेन-देन) तक बनी रहती है। आप उसे एक कथन से भरते हैं और बाद के अलग-अलग कथनों में उस पर क्वेरी चलाते हैं।
- सत्र के दौरान कई कथनों तक बनी रहती है।
- इस पर अनुक्रमणिकाएँ बनाई जा सकती हैं और आँकड़े एकत्र किए जा सकते हैं।
- इसमें डिस्क इनपुट/आउटपुट और स्पष्ट सफ़ाई की लागत आती है।
CREATE TEMP TABLE spend AS
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id;
SELECT * FROM spend WHERE total > 1000;भौतिकीकरण: मुख्य अंतर
साक्षात्कारकर्ता जिस मुख्य अवधारणा की जाँच करते हैं, वह है भौतिकीकरण: क्या मध्यवर्ती परिणाम को कहीं भौतिक रूप से लिखा जाता है या नहीं।
- उप-क्वेरी और CTE आमतौर पर भौतिक रूप से संग्रहीत नहीं किए जाते; अनुकूलक अक्सर उन्हें सीधे समाहित कर देता है।
- अस्थायी तालिका हमेशा संग्रहण में भौतिक रूप से संग्रहीत की जाती है।
- कुछ डेटाबेस संकेतों की सहायता से CTE के भौतिकीकरण को बाध्य या अवरुद्ध करने देते हैं।
अनुकूलन अवरोध और पुरानी PostgreSQL समस्या
ऐतिहासिक रूप से, PostgreSQL हर CTE को अनुकूलन अवरोध मानता था, उसे भौतिक रूप से संग्रहीत करता था और शर्त को नीचे धकेलने से रोकता था। PostgreSQL 12 से, एक बार संदर्भित किए गए सरल गैर-पुनरावर्ती CTE डिफ़ॉल्ट रूप से सीधे समाहित किए जाते हैं; इसे बदलने के लिए MATERIALIZED और NOT MATERIALIZED संकेत उपलब्ध हैं।
इस सूक्ष्म अंतर का उल्लेख करना वरिष्ठ स्तर की मजबूत समझ दिखाता है।
WITH spend AS NOT MATERIALIZED (
SELECT customer_id, SUM(amount) AS total
FROM orders GROUP BY customer_id
)
SELECT * FROM spend WHERE total > 1000;एक ही कथन में पुनः उपयोग
यदि आप एक ही मध्यवर्ती परिणाम का एक कथन में कई बार संदर्भ लेते हैं, तो उप-क्वेरी को दोहराने की तुलना में CTE अधिक साफ़-सुथरा हो सकता है। लेकिन सावधान रहें: सीधे समाहित CTE की हर बार संदर्भ लेने पर फिर से गणना हो सकती है।
जब फिर से गणना महँगी हो, तो भौतिकीकरण को बाध्य करना (या अस्थायी तालिका का उपयोग करना) एक ही काम को दो बार करने से बचाता है।
कई कथनों में पुनः उपयोग
CTE और उप-क्वेरी केवल एक कथन तक रहती हैं। यदि आपको एक ही परिणाम कई अलग-अलग क्वेरी में चाहिए, तो अस्थायी तालिका सही साधन है।
एक सामान्य स्थिति बहु-चरणीय ETL या प्रतिवेदन की होती है, जिसमें आप एक बार मध्यवर्ती डेटा-समुच्चय बनाते हैं और फिर उस पर कई विश्लेषण चलाते हैं। अस्थायी तालिका पर अनुक्रमणिका बनाने से बाद की प्रत्येक क्वेरी तेज़ हो सकती है।
अनुक्रमणिकाएँ और आँकड़े
केवल अस्थायी तालिका में अनुक्रमणिकाएँ और नए आँकड़े रखे जा सकते हैं। कई बार जोड़े जाने वाले बहुत बड़े मध्यवर्ती डेटा-समुच्चय के लिए यह निर्णायक हो सकता है।
- CTE/उप-क्वेरी: अनुकूलक अंतर्निहित तालिकाओं से अनुमान लगाता है।
- अस्थायी तालिका: आप उस पर
ANALYZEचला सकते हैं और बाद के जोड़ के अनुसार अनुकूलित अनुक्रमणिकाएँ जोड़ सकते हैं।
इसलिए बड़े और बार-बार उपयोग किए जाने वाले परिणामों के लिए, अतिरिक्त चरणों के बावजूद, प्रदर्शन में अस्थायी तालिका बेहतर हो सकती है।
निर्णय-ढाँचा
साक्षात्कार के लिए एक सटीक उत्तर:
- उप-क्वेरी: एक बार का, कम-गहराई वाला उपयोग, जहाँ पठनीयता पर्याप्त हो।
- CTE: पठनीयता बेहतर करनी हो या एक ही कथन में कुछ बार संदर्भ लेना हो।
- अस्थायी तालिका: कई कथनों में पुनः उपयोग, बहुत बड़ा परिणाम, या अनुक्रमणिकाओं/आँकड़ों की आवश्यकता हो।
स्पष्टता के लिए सामान्यतः CTE चुनें; जब भौतिकीकरण या कथनों के बीच पुनः उपयोग वास्तव में लाभ दे, तब अस्थायी तालिका चुनें।
संतुलन कैसे समझाएँ
'CTE हमेशा धीमे होते हैं' जैसे पूर्ण कथनों से बचें। इसके बजाय कहें: CTE और उप-क्वेरी आमतौर पर सीधे समाहित किए जाते हैं, इसलिए उनका मुख्य लाभ पठनीयता है; अस्थायी तालिका भौतिक रूप से संग्रहीत की जाती है और तब उपयोगी होती है जब मैं कई कथनों में बड़े परिणाम का पुनः उपयोग करूँ या मुझे अनुक्रमणिका की आवश्यकता हो।
यह स्वीकार करना कि व्यवहार डेटाबेस-इंजन-विशिष्ट होता है (और PostgreSQL में संस्करण-विशिष्ट भी), वास्तविक गहरी समझ दिखाता है।
त्वरित जाँच
वह परिस्थिति चुनिए जिसमें अस्थायी तालिका स्पष्ट रूप से बेहतर विकल्प हो।
पुनरावलोकन: CTE बनाम उप-क्वेरी बनाम अस्थायी तालिका
चुनाव भौतिकीकरण और दायरे पर निर्भर करता है।
- उप-क्वेरी और CTE: आमतौर पर सीधे समाहित, एक कथन तक सीमित और पठनीयता के लिए चुने जाते हैं।
- CTE नामकरण और एक ही कथन के भीतर पुनः उपयोग की सुविधा देते हैं।
- अस्थायी तालिकाएँ: हमेशा भौतिक रूप से संग्रहीत होती हैं, कई कथनों तक बनी रहती हैं और उन पर अनुक्रमणिकाएँ बनाई जा सकती हैं।
- PostgreSQL 12+ सरल CTE को सीधे समाहित करता है; इसे नियंत्रित करने के लिए MATERIALIZED संकेतों का उपयोग करें।
अगला विषय: उलझी हुई अंदर रखी गई क्वेरी को साफ़ CTE में पुनर्संरचित करना।
एआई शिक्षक के साथ SQL सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “CTE बनाम सबक्वेरी बनाम अस्थायी तालिका” पाठ निःशुल्क है?
हाँ—“CTE बनाम सबक्वेरी बनाम अस्थायी तालिका” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और SQL साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“CTE बनाम सबक्वेरी बनाम अस्थायी तालिका” में मैं क्या सीखूँगा?
भौतिकीकरण, पुनः उपयोग और optimizer के व्यवहार के बीच समझौते समझें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ SQL साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या SQL साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर SQL साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“CTE बनाम सबक्वेरी बनाम अस्थायी तालिका” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस SQL साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर SQL साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- अपनी पहली CTE लिखना
- कई CTE को जोड़ना
- CTE बनाम सबक्वेरी बनाम अस्थायी तालिका
- नेस्टेड क्वेरी को CTE में पुनर्गठित करना