SQL संतरी योजना एक्सप्लोरर के हालिया अपडेट के लिए धन्यवाद देने के लिए मेरे पास कुछ लोग हैं। ब्रुक फिल्पोट (@Macromullet) और ग्रेग गोंजालेज (ब्लॉग | @SQLsensei), निश्चित रूप से, R &D के लिए और कोड में खुदाई करने और इसे छाँटने के लिए। लेकिन पॉल व्हाइट (ब्लॉग | @SQL_kiwi) को भी सुधारों को मान्य करने में हमारी मदद करने के लिए लगातार बने रहने के लिए।
पॉल की खोज की समस्या यह है कि SQL Server 2008+ कुंजी या RID लुकअप शामिल होने पर कुछ प्रश्नों पर कार्डिनैलिटी अनुमानों को गड़बड़ कर देता है। मैं पॉल के ब्लॉग पोस्ट और कनेक्ट पर उसके द्वारा दायर की गई बग के बारे में गहन स्पष्टीकरण छोड़ता हूं, लेकिन लंबी कहानी संक्षेप में, हम इन गलत तरीके से प्रस्तुत किए गए अनुमानों को ले रहे थे, उन पर विश्वास कर रहे थे, और आपको "बेहतर" जानकारी दिखाने के लिए उन्हें एक्सट्रपलेशन कर रहे थे। दुर्भाग्य से, जैसा कि पॉल बताते हैं, हमें धोखा दिया गया।
पॉल एडवेंचरवर्क्स 2005 की एक प्रति के खिलाफ निम्नलिखित प्रश्न दिखाता है।
SELECT th.ProductID, th.TransactionID, th.TransactionDate FROM Production.TransactionHistory AS th WHERE th.ProductID = 1 AND th.TransactionDate BETWEEN '20030901' AND '20031231';
प्रबंधन स्टूडियो निम्नलिखित योजना देता है, जैसा कि पॉल ने इसका वर्णन किया है:
प्लान एक्सप्लोरर में, हमने पंक्तियों की अनुमानित संख्या (17 तक गोल) को निष्पादनों की संख्या (45) से गुणा करके मददगार बनने की कोशिश की, और 765 के साथ आए:
अधिकांश ऑपरेटरों के लिए, यह दृष्टिकोण सही डेटा उत्पन्न करता है, लेकिन SQL सर्वर में इस बग के कारण, यह कुंजी/आरआईडी लुकअप के लिए सही नहीं है। हमने उसके लिए समायोजन किया है, और 7.2.42.0 में उपयुक्त सुधार जारी किया है (इसे अभी डाउनलोड करें!)। ग्राफिकल योजना अब अनुमानित दोनों के लिए सही पंक्ति गणना दिखाती है:
और वास्तविक:
मैं पॉल की चेतावनी दोहराऊंगा:लुकअप के हिस्से के रूप में विधेय लागू होने पर खराब कार्डिनैलिटी अनुमानों से सावधान रहें।
इन भ्रामक अनुमानों के कारण कुछ और जटिल समस्याएं थीं, जिनका हमने समाधान भी किया है। मैं अनुवर्ती पोस्ट में उनमें से कुछ के बारे में ब्लॉग करूंगा - इस पोस्ट के लिए मैं सिर्फ यह दिखाना चाहता था कि हमने पॉल द्वारा अपने पोस्ट में हाइलाइट किए गए विशिष्ट मुद्दे को जल्दी से हल किया।