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

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