मेरे पास एक बड़ी तालिका पर एक क्वेरी है जो इस तरह दिखती है:
declare @myIdParam int = 1
select *
from myTable
where (@myIdParam is null or myTable.Id = @myIdParam)
इस तरह की कई स्थितियां हैं जहां खंड में, और बहुत सारे जोड़ भी हैं, लेकिन यह एक सारांश है।
प्रभावी रूप से, यदि @myIdParam शून्य है, तो हम इस पैरामीटर का उपयोग करके परिणामों को प्रतिबंधित नहीं करना चाहते हैं।
मैं एक DB समर्थक नहीं हूँ, लेकिन मेरे परीक्षणों से ऐसा लगता है कि यह NULL जाँच हर रिकॉर्ड के लिए की जाती है और किसी भी तरह से अनुकूलित नहीं है।
यदि मैं अशक्त जांच को हटा देता हूं और मान लेता हूं कि पैरामीटर अशक्त नहीं है, तो क्वेरी तुरंत लौट आती है। अन्यथा, इसमें दस सेकंड तक का समय लगता है।
क्या इसका अनुकूलन करने का कोई तरीका है ताकि चेक केवल एक बार रनटाइम पर किया जाए?
OPTION(RECOMPILE)