/ / जुड़ने के लिए तालिका चर के मुकाबले अस्थायी तालिकाओं क्यों तेज हैं? - एसक्यूएल-सर्वर, जॉइन, टेबल-वेरिएबल, टेम्प-टेबल

जुड़ने के लिए टेबल चर के मुकाबले अस्थायी तालिकाओं क्यों तेज हैं? - एसक्यूएल-सर्वर, जॉइन, टेबल-वेरिएबल, टेम्प-टेबल

एसक्यूएल सर्वर में जुड़ने के लिए टेबल चर के मुकाबले अस्थायी टेबल तेज क्यों हैं?

नोट: दोनों परिदृश्यों में तालिकाओं में पीके होता है, और तालिका पीके के माध्यम से अन्य "भौतिक" तालिकाओं के साथ जुड़ जाती है।

उत्तर:

उत्तर № 1 के लिए 10

दोनों Tempdb में बने रहे हैं; हालाँकि,प्रदर्शन समस्याएं खेलती हैं क्योंकि ऑप्टिमाइज़र तालिका चर पर आंकड़े बनाए रखता नहीं है। यह समस्याग्रस्त है क्योंकि अनुकूलक हमेशा यह मानने जा रहा है कि आपकी तालिका चर में 1 पंक्ति है। जाहिर है, यह वास्तव में एक प्रश्न योजना को खराब कर सकता है, खासकर जब आपकी तालिका चर में बहुत सारी पंक्तियां होती हैं। मैं 1000 या उससे अधिक पंक्तियों से अधिक कुछ स्टोर करने के लिए टेबल वैरिएबल का उपयोग नहीं करता; अन्यथा, प्रदर्शन अप्रत्याशित हो सकता है।


जवाब के लिए 4 № 2

Temp टेबल टेबल के समान हैं लेकिन वे हैंजब बनाया गया था तो tempdb में स्टोर करें, जिसका अर्थ है कि ऑप्टिमाइज़र उन पर आंकड़े बना सकता है, जबकि तालिका वैरिएबल वैरिएबल के समान है और उनके बारे में कोई आंकड़े नहीं हैं। सामान्य रूप से तालिका चर के रूप में tmp टेबल की तुलना करते समय, अस्थायी रूप से temp टेबल ऊपर आते हैं। कारण यह है कि क्वेरी ऑप्टिमाइज़र कभी-कभी टेबल वर्रों के लिए खराब योजनाएं उत्पन्न करेगा। जब बहुत सारे डेटा होते हैं तो यह ज्यादातर देखा जा सकता है। सबसे बड़ा बिंदु मैं कर सकता हूं कि टेम्पलेट टेबल के लिए जेनरेट की गई योजनाओं की तुलना में टेबल वैरिएबल अप्रत्याशित निष्पादन योजनाओं की संभावना अधिक है। दूसरी तरफ Temp टेबल, अधिक recompilation का कारण बन जाएगा।