क्लस्टर किए गए अनुक्रमणिका को अक्षम करने से तालिका अप्राप्य क्यों हो जाती है?


11

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

बी-ट्री को त्यागने वाली तालिका से सीधे डेटा तक पहुंचना क्यों संभव नहीं है? (सबसे अधिक संभावना है कि पंक्ति द्वारा तालिका पंक्ति को स्कैन करके) डेटा को पूरी तरह से अप्राप्य बनाने से अधिक उपयुक्त नहीं होगा?

यह विशुद्ध सैद्धांतिक सवाल है - मैं वास्तव में ऐसा कभी नहीं करूंगा। यह एक परिदृश्य नहीं है, और न ही एक बात है, मैं सिर्फ यह जानना चाहता हूं कि बात क्यों इस तरह से जाती है, इसे एक आंतरिक प्रश्न मानते हैं।

जवाबों:


10

बी-ट्री को त्यागने वाली तालिका से सीधे डेटा तक पहुंचना संभव क्यों नहीं है? (सबसे अधिक संभावना है कि पंक्ति द्वारा तालिका पंक्ति को स्कैन करके) दुर्गम डेटा की तुलना में अधिक उपयुक्त नहीं होगा?

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

साथ ही, जैसा कि बहुत से लोगों ने वर्णन किया है, Clustered Indexes == मूल तालिकाएँ जिन्हें भौतिक रूप से एक या अधिक कुंजियों या स्तंभों के साथ क्रमबद्ध किया गया है। इसलिए, जब एक क्लस्टर इंडेक्स को अक्षम किया जाता है, तो इसकी डेटा पंक्तियों तक नहीं पहुंचा जा सकता है। आप किसी भी डेटा को सम्मिलित करने में सक्षम नहीं होंगे (नॉन क्लस्टर्ड इंडेक्स के लिए इंसर्ट सफल होगा - लेकिन यह पूरी तरह से इस पोस्ट से संबंधित नहीं है - जैसा कि यहां चर्चा क्लस्टर्ड इंडेक्स की है) या तो न ही पुनर्गठन कार्य करेगा।

नीचे आपको विस्तार से समझाएंगे:

CLUSTERED Index को निष्क्रिय करने के प्रभाव को देखने के लिए हम Adventureworks डेटाबेस का उपयोग करेंगे ।

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

अब तालिका में पंक्ति गणना जांचें:

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

अब Clustered Index को Disable कर दें

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

अब तालिका से पंक्ति गणना का चयन करें। इस बार यह नीचे संदेश के साथ त्रुटि करेगा:

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

यहां तक ​​कि पुनर्गठन कार्य भी नहीं करता है !!

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

अब Clustered Index का पुनर्निर्माण करें और इसे ठीक काम करना चाहिए।

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

यह देखने के लिए कि क्या हम डेटा तक पहुँच सकते हैं, तालिका का चयन करें

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

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

नोट: सूचकांक को सक्षम करने का कोई विकल्प नहीं है। आपको इसे REBUILD करना होगा।


2

बी + पेड़ का पत्ती स्तर तालिका है। सीआई को अक्षम करके आप क्या हासिल करने की उम्मीद कर रहे हैं? यदि आप डेटा को अप्राप्य नहीं करना चाहते हैं तो बस ऐसा न करें।

मुझे यकीन नहीं है कि SQL सर्वर आपको ऐसा करने की अनुमति क्यों देता है।

CREATE TABLE T
(
    X INT CONSTRAINT PK PRIMARY KEY CLUSTERED, 
    Y INT CONSTRAINT UQ UNIQUE NONCLUSTERED
);

ALTER INDEX PK ON T DISABLE;

... एनसीआई को भी निष्क्रिय कर देता है, यहां तक SELECTकि उससे जुड़े प्रश्नों को भी अक्षम कर दिया जाता है। मैं इसके लिए किसी भी उपयोग के मामले के बारे में नहीं सोच सकता। - मार्टिन-स्मिथ

एकमात्र उपयोग जो मैं अपने सिर के बारे में सोच सकता हूं, वही है जिस पर चर्चा की जा रही है। एक टेबल को निष्क्रिय करना। यदि आपके पास एक तालिका है जिसे आप किसी को छूना नहीं चाहते हैं, यहां तक ​​कि dboया sysadmin, तो आप क्लस्टर किए गए इंडेक्स को अक्षम कर सकते हैं। तालिका डेटा के साथ मौजूद है, लेकिन जब तक आप संकुल अनुक्रमणिका को पुन: सक्षम नहीं करते, तब तक यह पूरी तरह से अप्राप्य है। - केनेथ-फिशर

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.