SQL सर्वर प्लान्स: इंडेक्स स्कैन / इंडेक्स सीक के बीच अंतर


87

SQL सर्वर निष्पादन योजना में एक इंडेक्स स्कैन और इंडेक्स सीक के बीच क्या अंतर है

मैं SQL Server 2005 पर हूँ।

जवाबों:


128

एक इंडेक्स स्कैन वह होता है जहां SQL सर्वर मैच की तलाश में पूरे इंडेक्स को पढ़ता है - इसमें लगने वाला समय इंडेक्स के आकार के समानुपाती होता है।

एक अनुक्रमणिका की तलाश है जहाँ SQL सर्वर अनुक्रमणिका के बी-ट्री संरचना का उपयोग सीधे मिलान के रिकॉर्ड की तलाश करने के लिए करता है (देखें http://mattfleming.com/node/192 यह कैसे काम करता है पर एक विचार के लिए) - समय लिया गया केवल आनुपातिक है मिलान रिकॉर्ड की संख्या।

  • सामान्य तौर पर एक इंडेक्स की तलाश एक इंडेक्स स्कैन के लिए बेहतर होती है (जब मिलान रिकॉर्ड की संख्या कुल मिलाकर रिकॉर्ड की संख्या से बहुत कम होती है), क्योंकि इंडेक्स की तलाश करने के लिए लिया गया समय आपके रिकॉर्ड की संख्या की परवाह किए बिना निरंतर होता है। तालिका।
  • हालांकि ध्यान दें कि कुछ स्थितियों में एक इंडेक्स की तुलना में एक इंडेक्स स्कैन (कभी-कभी काफी तेज) हो सकता है - आमतौर पर जब टेबल बहुत छोटा होता है, या जब रिकॉर्ड का एक बड़ा प्रतिशत विधेय से मेल खाता है।

3
क्या लिंक अभी भी सक्रिय है? मेरे लिए यह काम नहीं करता है। अगर कोई अपडेटेड लिंक है तो कृपया मदद करें
रौनक अग्रवाल

2
@RonakAgrawal लगता है कि लिंक वास्तव में मृत है - शायद इसके बजाय विकिपीडिया की जाँच करें ?
जस्टिन


76

फॉलो करने का बेसिक नियम स्कैन्स खराब हैं, सॉक्स अच्छे हैं।

सूचकांक स्कैन

जब SQL सर्वर एक स्कैन करता है, तो यह उस वस्तु को लोड करता है जिसे वह डिस्क से मेमोरी में पढ़ना चाहता है, फिर उस ऑब्जेक्ट के माध्यम से ऊपर से नीचे तक उस रिकॉर्ड की तलाश करता है, जिसकी उसे आवश्यकता है।

सूचकांक की तलाश

जब SQL सर्वर यह चाहता है कि उसे पता है कि सूचकांक में डेटा कहां जा रहा है, तो यह डिस्क से इंडेक्स को लोड करता है, सीधे उस इंडेक्स के हिस्से में जाता है जिसे इसकी आवश्यकता होती है और यह पढ़ता है कि डेटा की आवश्यकता कहां है । यह स्पष्ट रूप से एक स्कैन की तुलना में बहुत अधिक कुशल संचालन है, क्योंकि एसक्यूएल पहले से ही जानता है कि यह जिस डेटा की तलाश में है वह स्थित है।


मैं स्कैन के बजाय सीक का उपयोग करने के लिए निष्पादन योजना को कैसे संशोधित कर सकता हूं?

जब SQL सर्वर आपके डेटा की तलाश कर रहा होता है, तो शायद सबसे बड़ी चीजों में से एक है जो SQL सर्वर को एक खोज से स्कैन में बदल देगा, जब आप जो कॉलम देख रहे हैं, उनमें से कुछ ऐसे इंडेक्स में शामिल नहीं हैं जिन्हें आप उपयोग करना चाहते हैं। बहुधा इसमें SQL सर्वर फॉलड इंडेक्स स्कैन करने के लिए वापस आ जाता है, क्योंकि क्लस्टर्ड इंडेक्स में टेबल के सभी कॉलम होते हैं। यह एक सबसे बड़ा कारण है (कम से कम मेरी राय में) कि अब हमें सूचकांक में स्तंभों को शामिल करने की क्षमता है, बिना उन स्तंभों को सूचकांक के अनुक्रमित स्तंभों में शामिल किए बिना। इंडेक्स में अतिरिक्त कॉलमों को शामिल करने से हम इंडेक्स के आकार को बढ़ाते हैं, लेकिन हम SQL सर्वर को इंडेक्स को पढ़ने की अनुमति देते हैं, बिना क्लस्टर इंडेक्स पर वापस आए बिना, या इन मूल्यों को प्राप्त करने के लिए तालिका को स्वयं।

संदर्भ

SQL सर्वर निष्पादन योजना के भीतर इन ऑपरेटरों में से प्रत्येक की बारीकियों के बारे में जानकारी के लिए देखें ....


7

संक्षिप्त जवाब:

  • सूचकांक स्कैन: सभी पंक्तियों लेकिन कुछ स्तंभों को स्पर्श करें।

  • सूचकांक की तलाश: कुछ पंक्तियों और कुछ स्तंभों को स्पर्श करें।


4

एक सूचकांक स्कैन के साथ, सूचकांक में सभी पंक्तियों को मिलान पंक्ति को खोजने के लिए स्कैन किया जा रहा है। यह छोटे तालिकाओं के लिए कुशल हो सकता है। इंडेक्स सीक के साथ, यह केवल उन पंक्तियों को छूने की जरूरत है जो वास्तव में मानदंडों को पूरा करती हैं और इसलिए आम तौर पर अधिक प्रदर्शन होता है


2

एक सूचकांक स्कैन तब होता है जब खोज परिभाषा को संतुष्ट करने के लिए एक एकल पंक्ति पर सूचकांक परिभाषा नहीं मिल सकती है। इस स्थिति में SQL सर्वर को कई पंक्तियों को स्कैन करना पड़ता है, ताकि पंक्तियों की एक श्रृंखला मिल जाए जो खोज की भविष्यवाणी को पूरा करती है।

इंडेक्स सीक के मामले में, एसक्यूएल सर्वर इंडेक्स परिभाषा का उपयोग करके एक एकल पंक्ति मिलान खोज की भविष्यवाणी करता है ।

इंडेक्स सॉक्स बेहतर और अधिक प्रभावी हैं।


0

एक स्कैन तालिका में हर पंक्ति को छूता है, भले ही आप उसके बाद के हैं या नहीं

एक तलाश केवल उन पंक्तियों को देखती है जो आप देख रहे हैं।

स्कैन की तुलना में आरे हमेशा बेहतर होते हैं क्योंकि वे डेटा को देखने के तरीके में अधिक कुशल होते हैं।

एक अच्छा स्पष्टीकरण यहाँ पाया जा सकता है


3
उदाहरण हमेशा बेहतर नहीं होते हैं , उदाहरण के लिए यदि तालिका अपेक्षाकृत छोटी है और उस तालिका में पंक्तियों का एक बड़ा प्रतिशत वापस करने की आवश्यकता है तो एक सूचकांक स्कैन अधिक कुशल हो सकता है।
जस्टिन

1
हाय जस्टिन, मुझे लगता है कि आप कहना चाहते हैं कि टेबल स्कैन कुछ समय बेहतर हो सकता है। इंडेक्स सीक हमेशा एक इंडेक्स स्कैन से बेहतर होता है जब तक कि हम क्लस्टर के बारे में बात नहीं कर रहे हैं। लेकिन, कभी-कभी, टेबल स्कैन या क्लस्टर इंडेक्स स्कैन आपके द्वारा बताए गए कारण के लिए अधिक कुशल हो सकता है। सूचकांक की तलाश करने और प्राप्त करने के बजाय फ़ील्ड तालिका से सूचकांक में नहीं हैं, कभी-कभी, एमएस sql तालिका का उपयोग करेगा भले ही सूचकांक में मानदंड फ़ील्ड हो।
जोस एरियाज़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.