डिफ़ॉल्ट रूप से पीके को क्लस्टर किया जाता है और ज्यादातर मामलों में, यह ठीक है। हालांकि, कौन सा प्रश्न पूछा जाना चाहिए:
- क्या मेरे पीके का क्लस्टर किया जाना चाहिए?
- मेरे क्लस्टर किए गए अनुक्रमणिका के लिए कौन सा कॉलम (कुंजी) सबसे महत्वपूर्ण होगा?
PK और क्लस्टर इंडेक्स 2 अंतर चीजें हैं:
- पीके एक बाधा है। पीके का उपयोग विशिष्ट रूप से पंक्तियों की पहचान करने के लिए किया जाता है, लेकिन भंडारण की कोई धारणा नहीं है। हालाँकि डिफ़ॉल्ट रूप से (SSMS में), यह एक अनूठे क्लस्टर इंडेक्स द्वारा लागू किया जाता है, यदि क्लस्टर्ड इंडेक्स अभी तक मौजूद नहीं है।
- क्लस्टर इंडेक्स एक विशेष प्रकार का इंडेक्स है जो लीफ लेवल पर पंक्ति डेटा को स्टोर करता है, जिसका अर्थ है कि यह हमेशा कवर होता है। सभी कॉलम चाहे वे कुंजी का हिस्सा हों या न हों, पत्ती के स्तर पर संग्रहीत होते हैं। यह अद्वितीय होना जरूरी नहीं है, जिस स्थिति में क्लस्टर कुंजी के लिए एक विशिष्ट (4 बाइट्स) जोड़ा जाता है।
अब हम 2 प्रश्न समाप्त करते हैं:
- मैं अपनी तालिका (PK) में विशिष्ट रूप से पंक्तियों की पहचान कैसे करना चाहता हूं
- मैं इसे एक इंडेक्स (क्लस्टर्ड इंडेक्स) के पत्ते के स्तर पर कैसे संग्रहीत करना चाहता हूं
यह इस बात पर निर्भर करता है:
- आप अपना डेटा मॉडल डिज़ाइन करते हैं
- आप अपने डेटा को क्वेरी करते हैं और आप अपने प्रश्नों को लिखते हैं
- आप अपना डेटा डालें या अपडेट करें
- ...
सबसे पहले, आपको एक क्लस्टर इंडेक्स की आवश्यकता है? यदि आप बल्क इंसर्ट करते हैं, तो अनऑर्डर किए गए डेटा को HEAP (बनाम क्लस्टर में डेटा ऑर्डर किया गया) को स्टोर करना अधिक कुशल है। यह RID (पंक्ति पहचानकर्ता, 8 बाइट्स) का उपयोग विशिष्ट रूप से पंक्तियों की पहचान करने और पृष्ठों पर संग्रहीत करने के लिए करता है।
गुच्छित सूचकांक एक यादृच्छिक मूल्य नहीं होना चाहिए। पत्ता स्तर का डेटा इंडेक्स कुंजी द्वारा संग्रहीत और ऑर्डर किया जाएगा। इसलिए विखंडन या पृष्ठ विभाजन से बचने के लिए इसे लगातार बढ़ना चाहिए। यदि यह पीके द्वारा हासिल नहीं किया जा सकता है, तो आपको एक अन्य कुंजी को एक गुच्छेदार उम्मीदवार के रूप में विचार करना चाहिए। पहचान योग्य स्तंभों, अनुक्रमिक GUID या यहां तक कि सम्मिलन की तारीख जैसे कुछ अनुक्रम अनुक्रमिक दृष्टिकोण से ठीक है क्योंकि सभी पंक्तियों को अंतिम पत्ती पृष्ठ पर जोड़ा जाएगा। दूसरी ओर, जबकि अद्वितीय पहचानकर्ता आपके व्यवसाय की जरूरतों के लिए पीके के रूप में उपयोगी हो सकते हैं, उन्हें क्लस्टर नहीं किया जाना चाहिए (वे बेतरतीब ढंग से आदेशित / उत्पन्न होते हैं)।
यदि कुछ डेटा और क्वेरी विश्लेषण के बाद, आपको पता चलता है कि आप ज्यादातर क्लस्टर में पीके में एक महत्वपूर्ण लुकअप करने से पहले अपने डेटा को प्राप्त करने के लिए एक ही सूचकांक का उपयोग करते हैं, तो आप इसे क्लस्टर इंडेक्स के रूप में मान सकते हैं, हालांकि यह विशिष्ट रूप से आपके डेटा की पहचान नहीं कर सकता है।
क्लस्टर इंडेक्स कुंजी उन सभी कॉलमों से बनी है, जिन्हें आप इंडेक्स करना चाहते हैं। यदि इस पर कोई अद्वितीय बाधा नहीं है (डुप्लिकेट के लिए वृद्धिशील मूल्य, शून्य अन्यथा) तो एक अद्वितीय स्तंभ (4 बाइट्स) जोड़ा जाता है। इस सूचकांक कुंजी को आपके सभी गैर-अनुक्रमित अनुक्रमितों के पत्ती स्तर पर प्रत्येक पंक्ति के लिए एक बार संग्रहीत किया जाएगा। उनमें से कुछ को इंडेक्स ट्री (बी-ट्री) की जड़ और पत्ती के स्तर के बीच मध्यवर्ती स्तरों (शाखा) में कई बार संग्रहीत किया जाएगा। यदि कुंजी बहुत बड़ी है, तो सभी गैर-संकुल सूचकांक बड़े हो जाएंगे, अधिक संग्रहण और अधिक IO, CPU, मेमोरी की आवश्यकता होगी ... यदि आपके पास नाम + जन्मतिथि + देश पर PK है, तो यह बहुत महत्वपूर्ण है कि यह कुंजी अच्छा उम्मीदवार नहीं है। यह एक गुच्छेदार सूचकांक के लिए बहुत बड़ा है। NEWSEQUENTIALID () का उपयोग करके अद्वितीय पहचानकर्ता को आमतौर पर एक संकीर्ण कुंजी (16 बाइट्स) के रूप में नहीं माना जाता है, हालांकि यह अनुक्रमिक है।
फिर एक बार जब आपको पता चला कि आपकी तालिका में पंक्तियों को विशिष्ट रूप से कैसे पहचाना जाए, तो आप एक PK जोड़ सकते हैं। यदि आपको लगता है कि आप इसे अपनी क्वेरी में उपयोग नहीं करेंगे, तो इसे क्रस्टर्ड न बनाएं। यदि आप किसी समय इसे क्वेरी करना चाहते हैं, तो आप अभी भी एक और गैर-अनुक्रमित सूचकांक बना सकते हैं। ध्यान दें कि पीके स्वचालित रूप से एक अद्वितीय सूचकांक बनाएगा।
गैर क्लस्टर किए गए अनुक्रमणिका में हमेशा क्लस्टर की गई कुंजी होगी। हालाँकि, यदि अनुक्रमित कॉलम (+ कुंजी कॉलम) कवर कर रहे हैं, तो क्लस्टर इंडेक्स में कोई भी महत्वपूर्ण लुकअप नहीं होगा। मत भूलो कि तुम भी शामिल कर सकते हैं और कहाँ एक गैर संकुल सूचकांक के लिए। (समझदारी से इस्तेमाल करो)
क्लस्टर किया गया अनुक्रमणिका अद्वितीय होना चाहिए और जितना संभव हो उतना संकीर्ण होना चाहिए, गुच्छित अनुक्रमणिका समय के साथ परिवर्तित नहीं होनी चाहिए और इसे वृद्धिशील रूप से सम्मिलित किया जाना चाहिए।
अब कुछ एसक्यूएल लिखने का समय है जो तालिका, क्लस्टर किए गए और गैर-अनुक्रमित सूचकांक और बाधाओं का निर्माण करेगा।
यह सभी सिद्धांत है क्योंकि हम आपके डेटा मॉडल और उपयोग किए गए डेटाैट (ए और बी) को नहीं जानते हैं।