आप जिस समस्या का सामना कर रहे हैं वह (लगभग निश्चित रूप से) कैश्ड क्वेरी प्लान के कारण है, जो क्वेरी को दिए गए पैरामीटर के कुछ संस्करण के लिए उपयुक्त है, लेकिन दूसरों के लिए नहीं (उर्फ पैरामीटर स्नीफिंग)।
यह एक सामान्य घटना है, और अक्सर पुराने आँकड़ों और/या बुरी तरह से खंडित अनुक्रमणिका द्वारा इसे बदतर बना दिया जाता है।
पहला कदम :सुनिश्चित करें कि आपने अपने सभी अनुक्रमितों का पुनर्निर्माण किया है और गैर-अनुक्रमित स्तंभों के आंकड़े अद्यतित हैं। (साथ ही, सुनिश्चित करें कि आपके क्लाइंट के पास नियमित रूप से शेड्यूल्ड इंडेक्स मेंटेनेंस जॉब है)
exec sp_msforeachtable "DBCC DBREINDEX('?')"
go
exec sp_msforeachtable "UPDATE STATISTICS ? WITH FULLSCAN, COLUMNS"
go
यह विहित संदर्भ है:अनुप्रयोग में धीमा, SSMS में तेज़?
यदि अनुक्रमणिका के पुनर्निर्माण और आँकड़ों को अद्यतन करने के बाद भी समस्या बनी रहती है, तो आपके पास कुछ विकल्प हैं:
-
डायनामिक SQL का उपयोग करें (लेकिन इसे पहले पढ़ें:The Curse and Blessings of Dynamic SQL)
-
OPTIMIZE FOR
. का उपयोग करें -
WITH(RECOMPILE)
Use का उपयोग करें