कृपया व्याख्या क्वेरी योजना SQL सर्वर चुनता है

वोट
3

में इस ब्लॉग पोस्ट , मैं स्पष्टीकरण क्यों एसक्यूएल सर्वर स्कैन की एक विशेष प्रकार का चयन करेंगे की जरूरत है:

के simplicities के लिए मान लेते हैं कि col1 अद्वितीय है और कभी मूल्य में वृद्धि हो रही है चलो, col2 1000 अलग-अलग मान है और वहाँ तालिका में 10,000,000 पंक्तियों हैं, और संकुल अनुक्रमणिका col1 के होते हैं कि, और एक nonclustered अनुक्रमणिका col2 पर मौजूद है।

क्वेरी निष्पादन निम्नलिखित शुरू में पारित कर दिया मापदंडों के लिए बनाई गई योजना की कल्पना कीजिए: @ P1 = 1 @ P2 = 99

ये मान निम्न कथन प्रतिस्थापित पैरामीटर का उपयोग कर के लिए एक इष्टतम queryplan परिणाम होगा:

टी जहां col1> 1 या col2 से चयन करें *

col1 द्वारा 99 आदेश;

अब, क्वेरी निष्पादन योजना की कल्पना करता है, तो प्रारंभिक पैरामीटर मान थे: @ P1 = 6,000,000 और @ P2 = 550।

पहले के रूप में, एक इष्टतम queryplan पारित कर दिया पैरामीटर प्रतिस्थापन के बाद बनाया जाएगा:

टी से चुनें * जहां col1> 6000000 या col2> 550 क्रम col1 द्वारा;

इन दो समान पैरामिट्रीकृत एसक्यूएल बयान संभावित बना सकते हैं और शुरू में पारित कर दिया पैरामीटर मान के अंतर की वजह से संचय बहुत अलग निष्पादन की योजना होगी। हालांकि, बाद से एसक्यूएल सर्वर केवल क्वेरी के साथ एक कार्य योजना लागू करके कैश, तो संभावना बहुत अधिक है कि पहले मामले में क्वेरी निष्पादन योजना 'col1> 1' पैरामीटर प्रतिस्थापन की वजह से एक संकुल अनुक्रमणिका स्कैन का उपयोग करेंगे रहे हैं। जबकि, दूसरे मामले में एक प्रश्न निष्पादन सूचकांक की तलाश का उपयोग कर योजना सबसे अधिक संभावना बनाई किया जाएगा।

से: http://blogs.msdn.com/sqlprogrammability/archive/2008/11/26/optimize-for-unknown-a-little-known-sql-server-2008-feature.aspx

क्यों पहली क्वेरी एक क्लस्टर सूचकांक का प्रयोग करेंगे, और एक सूचकांक दूसरे प्रश्न में की तलाश?

12/03/2009 को 15:41
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
1

ध्यान दें कि दोनों ही मामलों में क्लस्टर सूचकांक इस्तेमाल किया जाएगा। पहले उदाहरण में यह एक क्लस्टर सूचकांक स्कैन जहां दूसरे उदाहरण में के रूप में यह संकुल अनुक्रमणिका की तलाश है जो ज्यादातर मामलों में ब्लॉग राज्यों के लेखक के रूप में तेजी से हो जाएगा हो जाएगा।

एसक्यूएल सर्वर जानता है कि क्लस्टर सूचकांक बढ़ रही है। इसलिए यह पहले मामले में एक क्लस्टर सूचकांक स्कैन करेंगे।

12/03/2009 को 15:52
का स्रोत उपयोगकर्ता

वोट
1

ऐसे मामलों में जहां अनुकूलक देखता है कि तालिका के बहुमत में इस तरह के पहले प्रश्न के रूप में, क्वेरी में लौटा दी जाएगी में है, तो यह तो एक स्कैन करने के लिए एक की तलाश और अधिक कुशल है।

कहाँ केवल तालिका के एक छोटे से हिस्से में इस तरह के दूसरे प्रश्न में के रूप में, वापस कर दी जाएगी, तो एक सूचकांक की तलाश और अधिक कुशल है।

एक स्कैन यह उत्तीर्ण या नहीं तालिका में प्रत्येक पंक्ति तक पहुंचेंगे। लागत तालिका में पंक्तियों की कुल संख्या के लिए आनुपातिक है। एक स्कैन एक कुशल रणनीति यदि तालिका छोटा है या यदि पंक्तियों के सबसे विधेय के लिए अर्हता प्राप्त है।

एक की तलाश पंक्तियों को अर्हता और पृष्ठों है कि इन योग्यता पंक्तियां हो सकती हैं स्पर्श करेगा, लागत बल्कि तालिका में पंक्तियों की कुल संख्या के लिए की तुलना में योग्यता पंक्तियों और पृष्ठों की संख्या के लिए आनुपातिक है।

12/03/2009 को 15:49
का स्रोत उपयोगकर्ता

वोट
1

यह मानते हुए कि स्तंभ केवल धनात्मक पूर्णांक होते हैं:

एसक्यूएल सर्वर तालिका के आंकड़े देखेंगे हैं और देखते हैं कि, पहले प्रश्न के लिए, तालिका में सभी पंक्तियों col1> 1 के मानदंडों को पूरा, तो यह क्लस्टर सूचकांक स्कैन करने के लिए चुनता है।

दूसरा प्रश्न के लिए पंक्तियों की एक अपेक्षाकृत छोटे से अनुपात col1> 6000000 के मानदंडों को पूरा करेगा, तो एक सूचकांक का उपयोग कर की तलाश के प्रदर्शन में सुधार होगा।

12/03/2009 को 15:44
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more