समान व्यवहार अनुभवी। (सेट विकल्प बराबर) समांतर योजना का उत्पादन करने वाली नियमित क्वेरी और sp_executesql का उपयोग करके यह एक धारावाहिक योजना उत्पन्न करता है।
declare @xyzParam1 datetime,@xyzParam2 datetime
select @xyzParam1='Sep 1 2014 12:00:00:000AM',@xyzParam2='Sep 26 2014 11:59:59:000PM'
SELECT * FROM Theview WHERE departuretime BETWEEN @xyzParam1 AND @xyzParam2
;
बनाम
exec sp_executesql N'SELECT * FROM Theview WHERE departuretime BETWEEN @xyzParam1 AND @xyzParam2',N'@xyzParam1 datetime,@xyzParam2 datetime',@xyzParam1='Sep 1 2014 12:00:00:000AM',@xyzParam2='Sep 26 2014 11:59:59:000PM'
मैं इस्तेमाल किया दृश्य को संशोधित करने, क्योंकि यह जैसे निहित एक इष्टतम परिणाम ही प्राप्त कर सके शेष डेटा के लिए बाएं जुड़ता है जिसे हमेशा उम्मीद थी। (INNER में शामिल हो गए)
अब नियमित क्वेरी उसी योजना को चुनती है जैसे sp_executesql का उपयोग करके प्राप्त किया गया है और प्रदर्शन बेहतर तरीका है।
मुझे आश्चर्य है कि "sp_executesql योजनाओं को कैश नहीं करता है" मिथक कभी मर जाएगा - पढ़ें [गतिशील एसक्यूएल का अभिशाप और आशीर्वाद] (http://www.sommarskog.se/dynamic_sql.html) –
@OMG टट्टू - पैरामीटर स्नीफिंग SP_ExecuteSQL के साथ कोई समस्या हो सकती है? – JNK
@ जेएनके: व्यवहार का अनुभव करने के बाद से, मैंने डिफ़ॉल्ट रूप से एंटी-पैरामेट स्नीफिंग में डाल दिया है। –