संपादित करें:
कृपया मार्टिन की टिप्पणियों को नीचे देखें:
CTE को मेमोरी में टेबल के रूप में नहीं रखा जाता है। यह एक क्वेरी परिभाषा को एनकैप्सुलेट करने का एक तरीका है। ओपी के मामले में यह इनबिल्ट होगा और जैसा कर रहा है वैसा ही होगा SELECT Column1, Column2, Column3 FROM SomeTable
। ज्यादातर समय वे भौतिक रूप से सामने नहीं आते हैं, यही कारण है कि यह कोई पंक्तियाँ नहीं देता है WITH T(X) AS (SELECT NEWID())SELECT * FROM T T1 JOIN T T2 ON T1.X=T2.X
, निष्पादन योजनाओं की भी जांच करें। हालांकि कभी-कभी स्पूल प्राप्त करने के लिए योजना को हैक करना संभव है। इसके लिए संकेत देने के लिए एक कनेक्ट आइटम अनुरोध है। - मार्टिन स्मिथ 15 फरवरी 12 '17:08 पर
मूल उत्तर
CTE
MSDN पर अधिक पढ़ें
CTE स्मृति में उपयोग की जा रही तालिका बनाता है, लेकिन इसके बाद विशिष्ट क्वेरी के लिए केवल मान्य है। पुनरावर्तन का उपयोग करते समय, यह एक प्रभावी संरचना हो सकती है।
आप तालिका चर का उपयोग करने पर भी विचार कर सकते हैं। यह प्रयोग किया जाता है के रूप में एक अस्थायी तालिका प्रयोग किया जाता है और इसमें शामिल होने के लिए प्रत्येक के लिए फिर से materialized किए जाने की जरूरत के बिना कई बार इस्तेमाल किया जा सकता है। इसके अलावा, अगर आपको अभी कुछ रिकॉर्ड बनाए रखने की आवश्यकता है, तो अगले चयन के बाद कुछ और रिकॉर्ड जोड़ें, एक और ऑप के बाद कुछ और रिकॉर्ड जोड़ें, फिर बस उन मुट्ठी भर रिकॉर्ड को वापस करें, फिर यह एक आसान संरचना हो सकती है, जैसा कि यह नहीं है 'निष्पादन के बाद छोड़ने की जरूरत नहीं है। ज्यादातर सिर्फ सिंटैक्टिक शुगर। हालाँकि, यदि आप पंक्ति-गणना को कम रखते हैं, तो यह कभी भी डिस्क पर नहीं जाती है। देखें कि SQL सर्वर में अस्थायी तालिका और तालिका चर के बीच अंतर क्या है? अधिक जानकारी के लिए।
अस्थायी तालिका
MSDN पर और पढ़ें - लगभग 40% तरीके से नीचे स्क्रॉल करें
एक अस्थायी तालिका वस्तुतः डिस्क पर बनाई गई एक तालिका है, बस एक विशिष्ट डेटाबेस में जिसे हर कोई जानता है हटा दिया जा सकता है। यह उन टेबल को नष्ट करने के लिए एक अच्छे देव की जिम्मेदारी है जब उन्हें अब जरूरत नहीं है, लेकिन एक डीबीए भी उन्हें मिटा सकता है।
अस्थायी तालिकाएँ दो प्रकार में आती हैं: स्थानीय और वैश्विक। एमएस Sql सर्वर के संदर्भ में आप #tableName
स्थानीय के लिए एक पदनाम का उपयोग करते हैं , और ##tableName
वैश्विक के लिए पदनाम (पहचान की विशेषता के रूप में एकल या डबल # के उपयोग पर ध्यान दें)।
ध्यान दें कि टेम्बल टेबल के साथ, टेबल वेरिएबल्स या सीटीई के विपरीत, आप इंडेक्स और लाइक लागू कर सकते हैं, क्योंकि ये शब्द के सामान्य अर्थों में वैध रूप से टेबल हैं।
आम तौर पर मैं लंबे या बड़े प्रश्नों के लिए अस्थायी तालिकाओं का उपयोग करता हूं, और सीटीई या टेबल चर अगर मेरे पास पहले से ही एक छोटा डेटासेट था और कुछ छोटे के लिए कोड को जल्दी से स्क्रिप्ट करना चाहता था। अनुभव और दूसरों की सलाह इंगित करती है कि आपको सीटीई का उपयोग करना चाहिए जहां आपके पास बहुत कम संख्या में पंक्तियां हैं जो इससे वापस आ रही हैं। यदि आपके पास एक बड़ी संख्या है, तो आप शायद अस्थायी तालिका पर अनुक्रमण करने की क्षमता से लाभान्वित होंगे।