एसक्यूएल सर्वर - गैर-क्लस्टर इंडेक्स बनाम क्लस्टर्ड का उपयोग कब करें?


99

मैं संकुल और गैर-संकुल अनुक्रमणिका के बीच प्राथमिक अंतर जानता हूं और उन्हें इस बात की समझ है कि वे वास्तव में कैसे काम करते हैं। मैं समझता हूं कि क्लस्टर्ड और नॉन-क्लस्टर्ड इंडेक्स रीड रीड परफॉर्मेंस को कैसे बेहतर बनाते हैं। लेकिन एक बात मुझे यकीन नहीं है कि वह कारण क्या होगा जहां मैं एक को दूसरे पर चुनूंगा।

उदाहरण के लिए: यदि किसी तालिका में क्लस्टर इंडेक्स नहीं है, तो क्या एक गैर-क्लस्टर इंडेक्स बनाना चाहिए और क्या करने का लाभ प्राप्त करना चाहिए


3
प्रतिक्रिया देने के लिये धन्यवाद। मुझे पहले से ही पता है। मेरा सवाल यह है कि एक ऐसी स्थिति होगी जहां एक गैर-क्लस्टर इंडेक्स बनाने से एक क्लस्टर इंडेक्स बनाने से अधिक लाभ होगा
आयुध

2
हां, जब आपको एक क्लस्टर इंडेक्स से बचना चाहिए; कॉलम में कम कार्डिनिटी है, कोई विशेष क्रम नहीं है, अक्सर अद्यतन किया जाता है, गैर-अनुक्रमिक है, यह कई कॉलमों का एक संयुक्त है ...
TI

आपके उत्तर के लिए धन्यवाद।
आर्मलेटर

1
शायद यह सवाल आपकी मदद करेगा: stackoverflow.com/questions/5070529/…
डेविड गार्सिया गोंजालेज

संभावित अनुलिपि को किस
बजे माइकल फ्रीजिम

जवाबों:


117

मैं बस चेतावनी के एक शब्द में रखना चाहता हूं: कृपया बहुत सावधानी से अपने क्लस्टर किए गए सूचकांक को चुनें! प्रत्येक "नियमित" डेटा टेबल को एक क्लस्टर इंडेक्स होना चाहिए, क्योंकि क्लस्टर्ड इंडेक्स वास्तव में बहुत सारे ऑपरेशन को गति देता है - हाँ, स्पीड अप , यहां तक ​​कि आवेषण और हटाता है! लेकिन तभी जब आप एक अच्छा क्लस्टर इंडेक्स चुनें।

यह आपके SQL सर्वर डेटाबेस में सबसे अधिक प्रतिकृति डेटा संरचना है। क्लस्टरिंग कुंजी आपकी टेबल पर प्रत्येक और गैर-क्लस्टर किए गए इंडेक्स का भी हिस्सा होगी।

क्लस्टरिंग कुंजी उठाते समय आपको अत्यधिक सावधानी बरतनी चाहिए - यह होना चाहिए:

  • संकीर्ण (4 बाइट्स आदर्श)

  • अद्वितीय (यह "पंक्ति पॉइंटर" है सब के बाद। यदि आप इसे अद्वितीय नहीं बनाते हैं तो SQL सर्वर पृष्ठभूमि में आपके लिए यह कर देगा, प्रत्येक प्रविष्टि बार पंक्तियों की संख्या और गैर-संकेतित सूचकांकों की संख्या के लिए आपको कुछ बाइट्स खर्च करने होंगे। आपके पास - यह बहुत महंगा हो सकता है! "

  • स्थैतिक (कभी परिवर्तन नहीं - यदि संभव हो तो)

  • आदर्श रूप से बढ़ते-बढ़ते आप भयानक सूचकांक विखंडन के साथ समाप्त नहीं होंगे (एक GUID एक अच्छी क्लस्टरिंग कुंजी के कुल विपरीत है - उस विशेष कारण के लिए)

  • यह गैर-अशक्त होना चाहिए और आदर्श रूप से निश्चित चौड़ाई भी होना चाहिए - varchar(250)एक बहुत खराब क्लस्टरिंग कुंजी बनाता है

इन बिंदुओं के पीछे किसी भी चीज का वास्तव में दूसरे और तीसरे स्तर का महत्व होना चाहिए ...।

इस विषय पर किम्बर्ली ट्रिप्प्स ( द क्वीन ऑफ इंडेक्सिंग ) ब्लॉग पोस्ट में से कुछ देखें - उसने अपने ब्लॉग में जो कुछ भी लिखा है वह बिल्कुल अमूल्य है - इसे पढ़ें, इसे पचाएं - इसे लाइव करें!


1
स्पष्ट स्पष्टीकरण के लिए धन्यवाद marc_s। लेकिन तकनीकी रूप से, non clusteredहमारे लिए सूचकांक क्या करता है। इसके महत्व क्या हैं ..?
हड

@nad: एक अच्छा चुना हुआ गैर-संकुल सूचकांक आपकी खोजों को गति दे सकता है - अपने खोज मानदंडों के साथ संभावित रूप से लाखों पंक्तियों की तुलना करने के बजाय, आप दी गई पंक्ति को केवल 4, 5 तुलनाओं के साथ पा सकते हैं। यह एक बड़ा अंतर बनाता है !
marc_s

1
@MuriloKunze: इस विषय पर किम ट्रिप के ब्लॉग पोस्ट को पढ़ें - वह बहुत विस्तार से बताती है कि ऐसा क्यों है
marc_s

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