सबक्वायरी आमतौर पर तब तक ठीक होते हैं जब तक वे निर्भर उपक्वियर (जिसे correlated subqueries भी कहा जाता है)। यदि आप केवल स्वतंत्र सबक्वायरीज़ का उपयोग कर रहे हैं और वे उपयुक्त इंडेक्स का उपयोग कर रहे हैं तो उन्हें जल्दी से चलना चाहिए। यदि आपके पास एक निर्भर सबक्वायरी है तो आप प्रदर्शन समस्याओं में भाग ले सकते हैं क्योंकि बाहरी क्वेरी में प्रत्येक पंक्ति के लिए आम तौर पर एक निर्भर सबक्वायरी को चलाने की आवश्यकता होती है। तो यदि आपकी बाहरी क्वेरी में 1000 पंक्तियां हैं, तो सबक्वायरी 1000 बार चल जाएगी। दूसरी तरफ एक स्वतंत्र सबक्वायरी को आम तौर पर केवल एक बार मूल्यांकन करने की आवश्यकता होती है।
यदि आप सुनिश्चित नहीं हैं कि सबक्वायरी आश्रित या स्वतंत्र होने का मतलब अंगूठे का नियम है - यदि आप सबक्वायरी ले सकते हैं, इसे अपने संदर्भ से हटा दें, इसे चलाएं, और परिणाम सेट करें तो यह एक है independent subquery
।
यदि आपको वाक्यविन्यास त्रुटि मिलती है क्योंकि यह सबक्वायरी के बाहर कुछ तालिकाओं को संदर्भित करता है तो यह dependent subquery
है।
पाठ्यक्रम के सामान्य नियम में कुछ अपवाद हैं। उदाहरण के लिए:
- कई अनुकूलक एक निर्भर सबक्वायरी ले सकते हैं और इसे जॉइन के रूप में कुशलतापूर्वक चलाने के लिए एक रास्ता खोज सकते हैं। उदाहरण के लिए, कोई EXISTS क्वेरी के परिणामस्वरूप एंटी जॉइन क्वेरी प्लान नहीं हो सकता है, इसलिए यह जॉइन के साथ क्वेरी लिखने की तुलना में धीमा नहीं होगा।
- MySQL में bug है जहां एक अभिव्यक्ति के अंदर एक स्वतंत्र सबक्वायरी गलत आश्रित के रूप में गलत रूप से पहचाना जाता है और इसलिए एक उप-विषय क्वेरी योजना का उपयोग किया जाता है। यह स्पष्ट रूप से MySQL के नवीनतम संस्करणों में तय किया गया है।
यदि प्रदर्शन एक मुद्दा है तो अपने विशिष्ट प्रश्नों को मापें और देखें कि आपके लिए सबसे अच्छा क्या काम करता है।
स्रोत
2011-01-25 23:02:54
ऐसा नहीं है कि चांदी की गोली नहीं है - मुद्दा यह है कि प्रश्न का उत्तर व्यापक रूप से उत्तर दिया जाना चाहिए।इस बात की कोई गारंटी नहीं है कि एक डेटाबेस (MySQL) पर क्या काम करता है, ठीक उसी पर काम करता है। सबसे सरल नियम यह है कि अगर उपधारा से कॉलम अंतिम परिणाम सेट में हैं, तो जॉइन का उपयोग करें - यह दो तालिकाओं से डेटा प्राप्त करने का सबसे इष्टतम माध्यम है। अन्यथा, एक सबक्वायरी ठीक है लेकिन सहसंबंधित समस्याएं पैदा कर सकती हैं (हालांकि EXISTS के साथ नहीं)। –
आप किस आधार पर बताते हैं कि उप-प्रश्नों का उपयोग खत्म हो रहा है? यह निर्णय लेने में अजीब लगता है कि _ और फिर उप-प्रश्नों का उपयोग करने के लिए सर्वोत्तम प्रथाओं के बारे में जानकारी मांगें। –
[बनाम उप-क्वेरी में शामिल हों] का संभावित डुप्लिकेट (http://stackoverflow.com/questions/2577174/join-vs-sub-query) –