एसक्यूएल एक घोषित भाषा है, प्रक्रियात्मक भाषा नहीं है। यही है, आप अपने इच्छित परिणामों का वर्णन करने के लिए SQL कथन का निर्माण करते हैं। आप एसक्यूएल इंजन को यह नहीं बता रहे हैं कि काम कैसे करना है।
एक सामान्य नियम के रूप में, एसक्यूएल इंजन और एसक्यूएल ऑप्टिमाइज़र को सर्वश्रेष्ठ क्वेरी प्लान खोजने देना एक अच्छा विचार है। कई व्यक्ति-वर्ष के प्रयास हैं जो एक एसक्यूएल इंजन को विकसित करने में जाते हैं, इसलिए इंजीनियरों को वही करना चाहिए जो वे जानते हैं कि उन्हें कैसे करना है।
बेशक, ऐसी परिस्थितियां हैं जहां क्वेरी योजना इष्टतम नहीं है। फिर आप क्वेरी संकेत का उपयोग करना चाहते हैं, क्वेरी को पुन: व्यवस्थित करें, आंकड़े अपडेट करें, अस्थायी तालिकाओं का उपयोग करें, अनुक्रमित जोड़ें, और इसी तरह बेहतर प्रदर्शन प्राप्त करें।
अपने प्रश्न के लिए के रूप में। CTE और सबक्वेरी का प्रदर्शन, सिद्धांत में होना चाहिए, क्योंकि दोनों ही क्वेरी ऑप्टिमाइज़र को समान जानकारी प्रदान करते हैं। एक अंतर यह है कि एक से अधिक सीटीई का उपयोग एक बार में आसानी से पहचाना और गणना की जा सकती है। परिणाम कई बार संग्रहीत और पढ़े जा सकते हैं। दुर्भाग्य से, SQL सर्वर इस मूल अनुकूलन विधि का लाभ नहीं उठाता है (आप इसे सामान्य उपशमन उन्मूलन कह सकते हैं)।
अस्थायी तालिकाएँ एक अलग मामला है, क्योंकि आप क्वेरी को कैसे चलाया जाना चाहिए, इस बारे में अधिक मार्गदर्शन प्रदान कर रहे हैं। एक बड़ा अंतर यह है कि ऑप्टिमाइज़र अपनी क्वेरी योजना को स्थापित करने के लिए अस्थायी तालिका के आँकड़ों का उपयोग कर सकता है। इससे प्रदर्शन लाभ हो सकता है। इसके अलावा, यदि आपके पास एक जटिल सीटीई (उपश्रेणी) है जो एक से अधिक बार उपयोग किया जाता है, तो इसे एक अस्थायी तालिका में संग्रहीत करना अक्सर एक प्रदर्शन को बढ़ावा देगा। क्वेरी को केवल एक बार निष्पादित किया जाता है।
आपके प्रश्न का उत्तर यह है कि आपको अपने प्रदर्शन की अपेक्षा के लिए खेलने की आवश्यकता है, विशेष रूप से जटिल प्रश्नों के लिए जो नियमित रूप से चलते हैं। एक आदर्श दुनिया में, क्वेरी ऑप्टिमाइज़र को सही निष्पादन पथ मिलेगा। हालांकि यह अक्सर होता है, आप बेहतर प्रदर्शन पाने का एक तरीका खोजने में सक्षम हो सकते हैं।