निष्पादन योजनाओं पर एक प्रारंभिक नज़र यह दर्शाती है कि अभिव्यक्ति 1/0
गणना स्केलर ऑपरेटरों में परिभाषित की गई है:
अब, भले ही निष्पादन योजनाएं बाईं ओर चलना शुरू कर देती हैं, पुनरावृत्तियां बुला रही हैं Open
और GetRow
परिणामों को वापस करने के लिए बाल पुनरावृत्तियों पर विधियाँ, SQL सर्वर 2005 और बाद में एक अनुकूलन होता है, जिसमें अभिव्यक्तियाँ अक्सर केवल गणना स्केलर द्वारा परिभाषित की जाती हैं, मूल्यांकन बाद में स्थगित कर दिया जाता है ऑपरेशन के परिणाम की आवश्यकता है :
इस मामले में, अभिव्यक्ति परिणाम केवल तब आवश्यक होता है जब ग्राहक को वापसी के लिए पंक्ति को इकट्ठा किया जाता है (जिसे आप ग्रीन SELECT
आइकन पर होने के बारे में सोच सकते हैं )। उस तर्क से, आस्थगित मूल्यांकन का मतलब होगा कि अभिव्यक्ति का मूल्यांकन कभी नहीं किया जाता है क्योंकि न तो योजना एक वापसी पंक्ति उत्पन्न करती है। बिंदु को थोड़ा श्रम करने के लिए, न तो क्लस्टर इंडेक्स सीक और न ही टेबल स्कैन एक पंक्ति लौटाता है, इसलिए क्लाइंट के पास लौटने के लिए इकट्ठा करने के लिए कोई पंक्ति नहीं है।
हालांकि, एक अलग अनुकूलन है जिससे कुछ अभिव्यक्तियों को रनटाइम स्थिरांक के रूप में पहचाना जा सकता है और इसलिए क्वेरी निष्पादन शुरू होने से पहले एक बार मूल्यांकन किया जाता है । इस स्थिति में, यह एक संकेत है कि शोप्पन एक्सएमएल में पाया जा सकता है (बाईं ओर क्लस्टर इंडेक्स सीक प्लान, दाईं ओर टेबल स्कैन प्लान):
मैंने अंतर्निहित तंत्रों के बारे में अधिक लिखा है और वे इस ब्लॉग पोस्ट में प्रदर्शन को कैसे प्रभावित कर सकते हैं । वहां दी गई जानकारी का उपयोग करके, हम पहली क्वेरी को संशोधित कर सकते हैं ताकि निष्पादन शुरू होने से पहले दोनों अभिव्यक्तियों का मूल्यांकन और कैश किया जाए:
select 1/0 * CONVERT(integer, @@DBTS)
from #temp
where id = 1
select 1/0
from #temp2
where id = 1
अब, पहली योजना में एक निरंतर अभिव्यक्ति संदर्भ भी शामिल है, और दोनों प्रश्न त्रुटि संदेश का उत्पादन करते हैं। पहली क्वेरी में XML शामिल है:
अधिक जानकारी: गणना स्केलर, एक्सप्रेशन और प्रदर्शन