SQL सर्वर निष्पादन योजना में एक इंडेक्स स्कैन और इंडेक्स सीक के बीच क्या अंतर है
मैं SQL Server 2005 पर हूँ।
जवाबों:
एक इंडेक्स स्कैन वह होता है जहां SQL सर्वर मैच की तलाश में पूरे इंडेक्स को पढ़ता है - इसमें लगने वाला समय इंडेक्स के आकार के समानुपाती होता है।
एक अनुक्रमणिका की तलाश है जहाँ SQL सर्वर अनुक्रमणिका के बी-ट्री संरचना का उपयोग सीधे मिलान के रिकॉर्ड की तलाश करने के लिए करता है (देखें http://mattfleming.com/node/192 यह कैसे काम करता है पर एक विचार के लिए) - समय लिया गया केवल आनुपातिक है मिलान रिकॉर्ड की संख्या।
फॉलो करने का बेसिक नियम स्कैन्स खराब हैं, सॉक्स अच्छे हैं।
सूचकांक स्कैन
जब SQL सर्वर एक स्कैन करता है, तो यह उस वस्तु को लोड करता है जिसे वह डिस्क से मेमोरी में पढ़ना चाहता है, फिर उस ऑब्जेक्ट के माध्यम से ऊपर से नीचे तक उस रिकॉर्ड की तलाश करता है, जिसकी उसे आवश्यकता है।
सूचकांक की तलाश
जब SQL सर्वर यह चाहता है कि उसे पता है कि सूचकांक में डेटा कहां जा रहा है, तो यह डिस्क से इंडेक्स को लोड करता है, सीधे उस इंडेक्स के हिस्से में जाता है जिसे इसकी आवश्यकता होती है और यह पढ़ता है कि डेटा की आवश्यकता कहां है । यह स्पष्ट रूप से एक स्कैन की तुलना में बहुत अधिक कुशल संचालन है, क्योंकि एसक्यूएल पहले से ही जानता है कि यह जिस डेटा की तलाश में है वह स्थित है।
मैं स्कैन के बजाय सीक का उपयोग करने के लिए निष्पादन योजना को कैसे संशोधित कर सकता हूं?
जब SQL सर्वर आपके डेटा की तलाश कर रहा होता है, तो शायद सबसे बड़ी चीजों में से एक है जो SQL सर्वर को एक खोज से स्कैन में बदल देगा, जब आप जो कॉलम देख रहे हैं, उनमें से कुछ ऐसे इंडेक्स में शामिल नहीं हैं जिन्हें आप उपयोग करना चाहते हैं। बहुधा इसमें SQL सर्वर फॉलड इंडेक्स स्कैन करने के लिए वापस आ जाता है, क्योंकि क्लस्टर्ड इंडेक्स में टेबल के सभी कॉलम होते हैं। यह एक सबसे बड़ा कारण है (कम से कम मेरी राय में) कि अब हमें सूचकांक में स्तंभों को शामिल करने की क्षमता है, बिना उन स्तंभों को सूचकांक के अनुक्रमित स्तंभों में शामिल किए बिना। इंडेक्स में अतिरिक्त कॉलमों को शामिल करने से हम इंडेक्स के आकार को बढ़ाते हैं, लेकिन हम SQL सर्वर को इंडेक्स को पढ़ने की अनुमति देते हैं, बिना क्लस्टर इंडेक्स पर वापस आए बिना, या इन मूल्यों को प्राप्त करने के लिए तालिका को स्वयं।
संदर्भ
SQL सर्वर निष्पादन योजना के भीतर इन ऑपरेटरों में से प्रत्येक की बारीकियों के बारे में जानकारी के लिए देखें ....
संक्षिप्त जवाब:
सूचकांक स्कैन: सभी पंक्तियों लेकिन कुछ स्तंभों को स्पर्श करें।
सूचकांक की तलाश: कुछ पंक्तियों और कुछ स्तंभों को स्पर्श करें।
एक सूचकांक स्कैन के साथ, सूचकांक में सभी पंक्तियों को मिलान पंक्ति को खोजने के लिए स्कैन किया जा रहा है। यह छोटे तालिकाओं के लिए कुशल हो सकता है। इंडेक्स सीक के साथ, यह केवल उन पंक्तियों को छूने की जरूरत है जो वास्तव में मानदंडों को पूरा करती हैं और इसलिए आम तौर पर अधिक प्रदर्शन होता है
एक सूचकांक स्कैन तब होता है जब खोज परिभाषा को संतुष्ट करने के लिए एक एकल पंक्ति पर सूचकांक परिभाषा नहीं मिल सकती है। इस स्थिति में SQL सर्वर को कई पंक्तियों को स्कैन करना पड़ता है, ताकि पंक्तियों की एक श्रृंखला मिल जाए जो खोज की भविष्यवाणी को पूरा करती है।
इंडेक्स सीक के मामले में, एसक्यूएल सर्वर इंडेक्स परिभाषा का उपयोग करके एक एकल पंक्ति मिलान खोज की भविष्यवाणी करता है ।
इंडेक्स सॉक्स बेहतर और अधिक प्रभावी हैं।