मैंने एक क्वेरी का उपयोग किया है जो कि विधेय पर एक फ़ंक्शन का उपयोग करती है, कुछ इस प्रकार है:
commentType = 'EL'
AND commentDateTime >= DATEADD(month,datediff(month,0,getdate()) - 13,0)
मेरे पास कमेंटटाइप पर एक फ़िल्टर किया गया इंडेक्स है जिसमें 40K पंक्तियाँ हैं और जब मैं क्वेरी चलाता हूं, तो इंडेक्स सीक के लिए पंक्तियों की अनुमानित संख्या बहुत सटीक है (लगभग 11K), लेकिन अगले चरण (सॉर्ट ऑपरेटर) के लिए यह पूरी तरह से आँकड़ों की अनदेखी करता है। फ़िल्टर्ड इंडेक्स में कुल पंक्तियों की संख्या का अनुमान है।
ये क्यों हो रहा है? मैं sargability के बारे में मूल बातें जानता हूँ , और मैं सिर्फ एक वास्तविक तारीख (2014-01-01) और voila द्वारा dateadd की जगह विवेक की खातिर परीक्षण किया है ... तरह सही ढंग से पंक्तियों की संख्या का अनुमान लगाना शुरू कर दिया ...
यह क्यों हो रहा है और मैं इसे कैसे ठीक कर सकता हूं? मैं एक निश्चित तारीख नहीं दे सकता ...
DATEADD(month, -13, DATEADD(day, 1-DATEPART(day, SYSDATETIME()))
और देख सकते हैं कि क्या कोई अंतर है?
(commentType, commentDate)
, तो क्या यह वहां बेहतर व्यवहार करता है? यह सिर्फ इतना है कि फ़िल्टर किए गए सूचकांक कभी-कभी योजनाओं में विभिन्न बिंदुओं पर अनुमानों को गलत कर सकते हैं। फ़िल्टर किए गए इंडेक्स में कुल संख्या की रिपोर्ट करके अनुमान लगता है, लेकिन यह वास्तव में है कि योजना को गलत दिखाया जा रहा है।
DATEADD(month,datediff(month,0,getdate()) - 13,0)
मेरे लिए कोई मतलब नहीं है। इससे आप क्या करने की कोशिश कर रहे हैं? क्या इसमें सुधार / सरलीकरण किया जा सकता है?