एक संकुल और गैर-संकुल सूचकांक के बीच अंतर क्या हैं?


277

A clusteredऔर a के बीच अंतर क्या हैं non-clustered index?


8
आपके पास प्रति तालिका केवल एक संकुल सूचकांक हो सकता है। लेकिन अन्य बहुत सारे अंतर हैं ...
टॉम रॉबिन्सन

5
एक संकुल सूचकांक वास्तव में उस क्रम का वर्णन करता है जिसमें रिकॉर्ड भौतिक रूप से डिस्क पर संग्रहीत होते हैं, इसलिए इसका कारण आप केवल एक ही हो सकते हैं। एक गैर-संकुल सूचकांक एक तार्किक क्रम को परिभाषित करता है जो डिस्क पर भौतिक क्रम से मेल नहीं खाता है।
जोश

1
मूल रूप से संकुल का मतलब है कि डेटा तालिका में उस फिशिकल ऑर्डर में है। यही कारण है कि आपके पास प्रति तालिका केवल एक हो सकती है। अस्पष्ट रूप से इसका मतलब है कि यह "केवल" एक तार्किक आदेश है।
बीरी

2
@biri "लॉजिकल" ऑर्डर क्या है? एक गैर क्लस्टर इंडेक्स इंडेक्स कीज़ को भौतिक रूप से स्टोर करता है और यह एक पॉइंटर को टेबल पर रखता है, जिसका नाम क्लस्टर इंडेक्स कुंजी है।
स्टेफनी पेज

@ स्टेफ़नी पेज: तालिका के दृष्टिकोण से तार्किक। बेशक गैर-संकुलित सूचकांक को शारीरिक रूप से सूचकांक में ही आदेश दिया जाता है।
बिरानी

जवाबों:


268

गुच्छेदार सूचकांक

  • प्रति तालिका केवल एक
  • गैर-संकुल से पढ़ने के लिए तेज़ क्योंकि डेटा को सूचकांक क्रम में संग्रहीत किया जाता है

नॉन क्लस्टर्ड इंडेक्स

  • प्रति टेबल कई बार इस्तेमाल किया जा सकता है
  • सम्मिलित सूचकांक की तुलना में सम्मिलित करने और संचालन को अद्यतन करने के लिए तेज

दोनों प्रकार के सूचकांक प्रदर्शन का सुधार करेंगे जब उन क्षेत्रों के साथ डेटा का चयन करें जो सूचकांक का उपयोग करते हैं लेकिन अद्यतन धीमा कर देंगे और संचालन सम्मिलित करेंगे।

धीमी आवेषण और अद्यतन क्लस्टर इंडेक्स के कारण एक ऐसे क्षेत्र पर सेट किया जाना चाहिए जो सामान्य रूप से वृद्धिशील अर्थात आईडी या टाइमस्टैम्प हो।

SQL सर्वर आमतौर पर केवल एक इंडेक्स का उपयोग करेगा यदि इसकी चयनात्मकता 95% से ऊपर है।


9
भंडारण के विचार भी हैं। जब बिना क्लस्टर इंडेक्स वाली तालिका में पंक्तियों को सम्मिलित किया जाता है, तो पंक्तियों को वापस पृष्ठ पर संग्रहीत किया जाता है और एक पंक्ति को अद्यतन करने से पंक्ति को तालिका के अंत में स्थानांतरित किया जा सकता है, खाली स्थान छोड़कर तालिका और अनुक्रमित को टुकड़े कर सकता है।
यिर्मयाह पेशक

4
आपको परवाह नहीं है कि x क्या है। आपको बस इतना पता होना चाहिए कि लाखों उपयोगकर्ताओं के साथ एक ऐप के लिए, x महत्वपूर्ण होगा
Pacerier

14
यह पूरी तरह से हठधर्मिता है। यह "पढ़ने के लिए तेज़ नहीं है क्योंकि डेटा क्रम में संग्रहीत है"। यह पढ़ने में तेज़ है क्योंकि आप पढ़े गए सूचकांक से बचते हैं और तालिका को पढ़ते हैं। यह स्कैन करने के लिए तेज़ है (यदि यह सार्थक है) क्योंकि डेटा क्रम में संग्रहीत है। यानी क्लस्टरिंग फैक्टर परफेक्ट है।
स्टेफनी पेज

6
यह भी विचार है कि 95% रिकॉर्ड अद्वितीय होने की आवश्यकता एक गिरावट है। मान लें कि आपके पास 1,000,000 पंक्तियों वाली एक तालिका है और आप 500,000 कुंजियों वाले एक स्तंभ को अनुक्रमित करते हैं। 0% अद्वितीय हैं, लेकिन प्रत्येक कुंजी एक लाख पंक्तियों में से 2 रिटर्न देती है। यह इंडेक्स बिल्कुल उपयोगी है, भले ही रिकॉर्ड का 0% अद्वितीय हो।
स्टेफनी पेज

2
"डेटा को भौतिक रूप से सूचकांक क्रम में संग्रहीत किया जाता है" आपको इससे क्या मतलब है? एक स्तर पर यह बहुत हद तक सही है क्योंकि डेटा पेज और इंडेक्स लीफ पेज एक और एक ही हैं - इसलिए स्पष्ट रूप से एक का ऑर्डर दूसरे के ऑर्डर का वर्णन करता है। हालांकि यह किसी भी विशेष क्रम में जरूरी नहीं कि इस तरह के सूचकांक कुंजी का क्रम इस प्रकार है stackoverflow.com/questions/1251636/...
मार्टिन स्मिथ

79

क्लस्टर किए गए इंडेक्स डिस्क पर डेटा को भौतिक रूप से ऑर्डर करते हैं। इसका मतलब है कि इंडेक्स के लिए किसी अतिरिक्त डेटा की आवश्यकता नहीं है, लेकिन केवल एक क्लस्टर इंडेक्स (स्पष्ट रूप से) हो सकता है। क्लस्टर किए गए इंडेक्स का उपयोग करके डेटा एक्सेस करना सबसे तेज़ है।

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


3
'हालाँकि अगर आप केवल उस डेटा का चयन करते हैं जो अनुक्रमित कॉलम में उपलब्ध है तो आप डेटा को सीधे डुप्लिकेट किए गए इंडेक्स डेटा से वापस पा सकते हैं' - हाँ यह पसंदीदा क्लस्टर सूचकांक के लिए महत्वपूर्ण अपवाद है। मुझे लगता है कि इस मामले में आपके पास अनिवार्य रूप से एक क्लस्टर इंडेक्स है, लेकिन जिस तालिका में आप संभावित रूप से क्वेरी कर रहे हैं, उससे कम डेटा इसे डिस्क पर तेजी से पढ़ा जा सकता है।
17

34

तालिका पर क्लस्टर किए गए अनुक्रमणिका को भौतिक रूप से संग्रहीत किया जाता है। इसका मतलब है कि वे सबसे तेज़ हैं और आपके पास प्रति टेबल केवल एक क्लस्टर इंडेक्स हो सकता है।

गैर-क्लस्टर किए गए अनुक्रमणिका को अलग से संग्रहीत किया जाता है, और आपके पास जितना चाहें उतना हो सकता है।

सबसे अच्छा विकल्प सबसे अधिक इस्तेमाल किए जाने वाले अनूठे कॉलम, आमतौर पर पीके पर अपने क्लस्टर किए गए सूचकांक को सेट करना है। आपके टेबल में हमेशा एक अच्छी तरह से चयनित क्लस्टर इंडेक्स होना चाहिए, जब तक कि बहुत सम्मोहक कारण - एक के बारे में नहीं सोच सकता है, लेकिन हे, यह वहाँ हो सकता है - ऐसा नहीं करने के लिए।


3
क्या आप "हम हमेशा अपने टेबल में एक क्लस्टर इंडेक्स होना चाहिए" पर अधिक विस्तार कर सकते हैं? विस्तार के बिना वह कथन हमेशा
Pacerier

1
आप सही पेसियर हैं, एक को हल्के ढंग से पूर्ण बयान का उपयोग नहीं करना चाहिए। हालाँकि मुझे एक भी मामले की जानकारी नहीं है, जब आपके पास एक अच्छी तरह से चयनित क्लस्टर इंडेक्स नहीं होना चाहिए, तो ऐसा मामला मौजूद हो सकता है इसलिए मैंने अपना जवाब एक अधिक सामान्य संस्करण में बदल दिया है।
सैंटियागो सिफस

28

गुच्छेदार सूचकांक

  1. एक तालिका के लिए केवल एक संकुल सूचकांक हो सकता है।
  2. आमतौर पर प्राथमिक कुंजी पर बनाया जाता है।
  3. क्लस्टर किए गए अनुक्रमणिका की पत्ती नोड्स में डेटा पृष्ठ होते हैं।

गैर-संकुल सूचकांक

  1. तालिका के लिए केवल 249 गैर-संकुल सूचकांक हो सकते हैं (2005 तक वर्ग संस्करण बाद में संस्करण 999 गैर-संकुलित अनुक्रमित तक समर्थन करते हैं)।
  2. आमतौर पर किसी भी कुंजी पर बनाया गया।
  3. नॉनक्लेस्टेड इंडेक्स के लीफ नोड में डेटा पेज नहीं होते हैं। इसके बजाय, पत्ती नोड्स में सूचकांक पंक्तियाँ होती हैं।

24

गुच्छेदार सूचकांक

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

नॉन क्लस्टर्ड इंडेक्स

  • किसी तालिका में गैर-संकुल अनुक्रमणिका की कोई संख्या हो सकती है
  • भौतिक क्रम को प्रभावित न करें। डेटा पंक्तियों के लिए एक तार्किक क्रम बनाएं और भौतिक डेटा फ़ाइलों के लिए पॉइंटर्स का उपयोग करें
  • डेटा प्रविष्टि / अद्यतन क्लस्टर इंडेक्स की तुलना में तेज़ है
  • तार्किक संरचना को संग्रहीत करने के लिए अतिरिक्त स्थान का उपयोग करें

इन अंतरों के अलावा आपको यह जानना होगा कि जब टेबल नॉन-क्लस्टर्ड होती है (जब टेबल में क्लस्टर इंडेक्स नहीं होता है) डेटा फाइलें अनियंत्रित होती हैं और यह डेटा संरचना के रूप में हीप डेटा संरचना का उपयोग करता है।


10

मूल रूप से संकुल का अर्थ है कि डेटा तालिका में उस भौतिक क्रम में है। यही कारण है कि आपके पास प्रति तालिका केवल एक हो सकती है।

अस्पष्ट रूप से इसका मतलब है कि यह "केवल" एक तार्किक आदेश है।


9

पेशेवरों:

गुच्छेदार अनुक्रमित श्रृंखलाओं के लिए बहुत अच्छा काम करते हैं (उदाहरण के लिए my_table से जहां * my_key जहां @min और @ max के बीच चयन करें)

कुछ स्थितियों में, DBMS को क्रमबद्ध विवरण का उपयोग करने पर कार्य करने के लिए कार्य नहीं करना पड़ेगा।

विपक्ष:

क्लस्टर किए गए अनुक्रमित आवेषण को धीमा कर सकते हैं क्योंकि अभिलेखों के भौतिक लेआउट को संशोधित करना होगा क्योंकि नई कुंजियों को अनुक्रमिक क्रम में नहीं होने पर रिकॉर्ड डाल दिया जाता है।


6

एक क्लस्टर इंडेक्स अनिवार्य रूप से अनुक्रमित कॉलम में डेटा की एक सॉर्ट की गई कॉपी है।

संकुलित सूचकांक का मुख्य लाभ यह है कि जब आपकी क्वेरी (खोज) सूचकांक में डेटा का पता लगाती है तो उस डेटा को पुनः प्राप्त करने के लिए किसी अतिरिक्त IO की आवश्यकता नहीं होती है।

क्लस्टर किए गए इंडेक्स को बनाए रखने का ओवरहेड, विशेष रूप से अक्सर अद्यतन की गई तालिका में, खराब प्रदर्शन का कारण बन सकता है और इस कारण से यह गैर-क्लस्टर इंडेक्स बनाने के लिए बेहतर हो सकता है।


6

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

उदाहरण के लिए, यदि कोई खाली गैर-संकुल डेटाबेस के साथ शुरू करना और यादृच्छिक अनुक्रम में 10,000 रिकॉर्ड जोड़ना चाहता था, तो रिकॉर्ड को संभवतः उसी क्रम में जोड़ा जाएगा, जिस क्रम में उन्हें जोड़ा गया था। सूचकांक द्वारा डेटाबेस को पढ़ने के लिए 10,000 एक-रिकॉर्ड रीड की आवश्यकता होगी। यदि कोई एक क्लस्टर किए गए डेटाबेस का उपयोग करने के लिए था, हालांकि, सिस्टम प्रत्येक रिकॉर्ड को जोड़ते समय जांच सकता है कि क्या पिछला रिकॉर्ड स्वयं द्वारा संग्रहीत किया गया था; यदि यह पाया गया कि मामला है, यह डेटाबेस के अंत में नए के साथ उस रिकॉर्ड को लिख सकता है। इसके बाद भौतिक रिकॉर्ड को देख सकते हैं कि स्लॉट्स से पहले जहां स्थानांतरित रिकॉर्ड निवास करते थे और देखें कि क्या रिकॉर्ड उसके बाद संग्रहीत किया गया था। यदि यह पाया गया कि मामला है, तो यह उस स्थान पर रिकॉर्ड को स्थानांतरित कर सकता है। इस तरह के दृष्टिकोण का उपयोग करने से कई रिकॉर्ड जोड़े में एक साथ जुड़ जाएंगे।

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


5

एक संकुल सूचकांक वास्तव में उस क्रम का वर्णन करता है जिसमें रिकॉर्ड भौतिक रूप से डिस्क पर संग्रहीत होते हैं, इसलिए इसका कारण आप केवल एक ही हो सकते हैं।

एक गैर-संकुल सूचकांक एक तार्किक क्रम को परिभाषित करता है जो डिस्क पर भौतिक क्रम से मेल नहीं खाता है।


2

आप उपरोक्त पदों से सिद्धांत के माध्यम से गए होंगे:

-कस्टर्ड इंडेक्स के रूप में हम सीधे रिकॉर्ड करने के लिए अंक देख सकते हैं यानी इसका प्रत्यक्ष तो यह एक खोज के लिए कम समय लेता है। इसके अतिरिक्त यह इंडेक्स को स्टोर करने के लिए कोई अतिरिक्त मेमोरी / स्पेस नहीं लेगा

-जबकि गैर-संकुल सूचकांक में, यह अप्रत्यक्ष रूप से क्लस्टर इंडेक्स को इंगित करता है तो यह वास्तविक रिकॉर्ड तक पहुंच जाएगा, अपने अप्रत्यक्ष प्रकृति के कारण इसे एक्सेस करने में कुछ और समय लगेगा। इसके अलावा इसे अपनी मेमोरी या स्टोर करने के लिए स्थान की आवश्यकता होती है सूची

यहां छवि विवरण दर्ज करें


0

// MSDN से कॉपी किया गया, गैर-संकुल सूचकांक का दूसरा बिंदु अन्य उत्तरों में स्पष्ट रूप से उल्लेख नहीं किया गया है।

क्लस्टर किया गया

  • क्लस्टर किए गए अनुक्रमणिका तालिका में डेटा पंक्तियों को सॉर्ट और संग्रहीत करते हैं या उनके प्रमुख मूल्यों के आधार पर देखते हैं। ये सूचकांक परिभाषा में शामिल कॉलम हैं। प्रति तालिका केवल एक संकुल सूचकांक हो सकता है, क्योंकि डेटा पंक्तियाँ केवल एक ही क्रम में संग्रहीत की जा सकती हैं।
  • केवल तालिका में डेटा पंक्तियाँ क्रमबद्ध क्रम में संग्रहीत होती हैं, जब तालिका में क्लस्टर अनुक्रमणिका होती है। जब किसी टेबल में क्लस्टर इंडेक्स होता है, तो टेबल को क्लस्टर टेबल कहा जाता है। यदि किसी तालिका में कोई क्लस्टर इंडेक्स नहीं है, तो उसकी डेटा पंक्तियों को एक अनियंत्रित संरचना में संग्रहीत किया जाता है जिसे एक ढेर कहा जाता है।

nonclustered

  • गैर-अनुक्रमित अनुक्रमित में डेटा पंक्तियों से अलग एक संरचना होती है। एक गैर-अनुक्रमित सूचकांक में गैर-अनुक्रमित प्रमुख कुंजी मान होते हैं और
    प्रत्येक कुंजी मूल्य प्रविष्टि में डेटा पंक्ति के लिए एक पॉइंटर होता है जिसमें कुंजी मूल्य होता है।
  • एक गैर-संकुलित सूचकांक में एक सूचकांक से एक डेटा पंक्ति के सूचक को पंक्ति लोकेटर कहा जाता है। पंक्ति लोकेटर की संरचना इस बात पर निर्भर करती है कि डेटा पृष्ठों को ढेर या संकुल तालिका में संग्रहीत किया जाता है या नहीं। एक ढेर के लिए, एक पंक्ति लोकेटर पंक्ति का एक संकेतक है। एक संकुल तालिका के लिए, पंक्ति लोकेटर संकुल सूचकांक कुंजी है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.