A clustered
और a के बीच अंतर क्या हैं non-clustered index
?
A clustered
और a के बीच अंतर क्या हैं non-clustered index
?
जवाबों:
गुच्छेदार सूचकांक
नॉन क्लस्टर्ड इंडेक्स
दोनों प्रकार के सूचकांक प्रदर्शन का सुधार करेंगे जब उन क्षेत्रों के साथ डेटा का चयन करें जो सूचकांक का उपयोग करते हैं लेकिन अद्यतन धीमा कर देंगे और संचालन सम्मिलित करेंगे।
धीमी आवेषण और अद्यतन क्लस्टर इंडेक्स के कारण एक ऐसे क्षेत्र पर सेट किया जाना चाहिए जो सामान्य रूप से वृद्धिशील अर्थात आईडी या टाइमस्टैम्प हो।
SQL सर्वर आमतौर पर केवल एक इंडेक्स का उपयोग करेगा यदि इसकी चयनात्मकता 95% से ऊपर है।
क्लस्टर किए गए इंडेक्स डिस्क पर डेटा को भौतिक रूप से ऑर्डर करते हैं। इसका मतलब है कि इंडेक्स के लिए किसी अतिरिक्त डेटा की आवश्यकता नहीं है, लेकिन केवल एक क्लस्टर इंडेक्स (स्पष्ट रूप से) हो सकता है। क्लस्टर किए गए इंडेक्स का उपयोग करके डेटा एक्सेस करना सबसे तेज़ है।
अन्य सभी सूचकांक गैर-संकुल होना चाहिए। गैर-संकुलित सूचकांक में अनुक्रमित स्तंभों से डेटा का एक डुप्लिकेट होता है जो वास्तविक डेटा पंक्तियों के संकेत के साथ-साथ क्रमबद्ध होता है (यदि एक है तो क्लस्टर इंडेक्स को इंगित करता है)। इसका मतलब है कि गैर-संकुल सूचकांक के माध्यम से डेटा तक पहुंच को अप्रत्यक्ष रूप से एक अतिरिक्त परत से गुजरना पड़ता है। हालाँकि यदि आप केवल उस डेटा का चयन करते हैं जो अनुक्रमित स्तंभों में उपलब्ध है, तो आप डेटा को सीधे डुप्लिकेट किए गए इंडेक्स डेटा से वापस प्राप्त कर सकते हैं (इसीलिए यह केवल उन कॉलमों का चयन करने के लिए एक अच्छा विचार है, जिनकी आपको आवश्यकता है और * का उपयोग न करें)
तालिका पर क्लस्टर किए गए अनुक्रमणिका को भौतिक रूप से संग्रहीत किया जाता है। इसका मतलब है कि वे सबसे तेज़ हैं और आपके पास प्रति टेबल केवल एक क्लस्टर इंडेक्स हो सकता है।
गैर-क्लस्टर किए गए अनुक्रमणिका को अलग से संग्रहीत किया जाता है, और आपके पास जितना चाहें उतना हो सकता है।
सबसे अच्छा विकल्प सबसे अधिक इस्तेमाल किए जाने वाले अनूठे कॉलम, आमतौर पर पीके पर अपने क्लस्टर किए गए सूचकांक को सेट करना है। आपके टेबल में हमेशा एक अच्छी तरह से चयनित क्लस्टर इंडेक्स होना चाहिए, जब तक कि बहुत सम्मोहक कारण - एक के बारे में नहीं सोच सकता है, लेकिन हे, यह वहाँ हो सकता है - ऐसा नहीं करने के लिए।
इन अंतरों के अलावा आपको यह जानना होगा कि जब टेबल नॉन-क्लस्टर्ड होती है (जब टेबल में क्लस्टर इंडेक्स नहीं होता है) डेटा फाइलें अनियंत्रित होती हैं और यह डेटा संरचना के रूप में हीप डेटा संरचना का उपयोग करता है।
पेशेवरों:
गुच्छेदार अनुक्रमित श्रृंखलाओं के लिए बहुत अच्छा काम करते हैं (उदाहरण के लिए my_table से जहां * my_key जहां @min और @ max के बीच चयन करें)
कुछ स्थितियों में, DBMS को क्रमबद्ध विवरण का उपयोग करने पर कार्य करने के लिए कार्य नहीं करना पड़ेगा।
विपक्ष:
क्लस्टर किए गए अनुक्रमित आवेषण को धीमा कर सकते हैं क्योंकि अभिलेखों के भौतिक लेआउट को संशोधित करना होगा क्योंकि नई कुंजियों को अनुक्रमिक क्रम में नहीं होने पर रिकॉर्ड डाल दिया जाता है।
एक क्लस्टर इंडेक्स अनिवार्य रूप से अनुक्रमित कॉलम में डेटा की एक सॉर्ट की गई कॉपी है।
संकुलित सूचकांक का मुख्य लाभ यह है कि जब आपकी क्वेरी (खोज) सूचकांक में डेटा का पता लगाती है तो उस डेटा को पुनः प्राप्त करने के लिए किसी अतिरिक्त IO की आवश्यकता नहीं होती है।
क्लस्टर किए गए इंडेक्स को बनाए रखने का ओवरहेड, विशेष रूप से अक्सर अद्यतन की गई तालिका में, खराब प्रदर्शन का कारण बन सकता है और इस कारण से यह गैर-क्लस्टर इंडेक्स बनाने के लिए बेहतर हो सकता है।
एक अनुक्रमित डेटाबेस में दो भाग होते हैं: भौतिक अभिलेखों का एक सेट, जो कुछ मनमाने क्रम में व्यवस्थित होते हैं, और अनुक्रमित का एक सेट जो उस अनुक्रम की पहचान करता है जिसमें रिकॉर्ड को कुछ मानदंड द्वारा क्रमबद्ध परिणाम प्राप्त करने के लिए पढ़ा जाना चाहिए। यदि भौतिक व्यवस्था और सूचकांक के बीच कोई संबंध नहीं है, तो सभी रिकॉर्डों को पढ़ने के लिए बहुत सारे स्वतंत्र एकल-रिकॉर्ड पढ़ने के संचालन की आवश्यकता हो सकती है। क्योंकि एक डेटाबेस लगातार कम समय में दर्जनों रिकॉर्ड को पढ़ने में सक्षम हो सकता है, जबकि इसे दो गैर-निरंतर रिकॉर्ड पढ़ने में लगेगा, यदि सूचकांक में लगातार रिकॉर्ड किए गए डिस्क पर भी संग्रहीत किए जाते हैं, तो प्रदर्शन में सुधार हो सकता है।
उदाहरण के लिए, यदि कोई खाली गैर-संकुल डेटाबेस के साथ शुरू करना और यादृच्छिक अनुक्रम में 10,000 रिकॉर्ड जोड़ना चाहता था, तो रिकॉर्ड को संभवतः उसी क्रम में जोड़ा जाएगा, जिस क्रम में उन्हें जोड़ा गया था। सूचकांक द्वारा डेटाबेस को पढ़ने के लिए 10,000 एक-रिकॉर्ड रीड की आवश्यकता होगी। यदि कोई एक क्लस्टर किए गए डेटाबेस का उपयोग करने के लिए था, हालांकि, सिस्टम प्रत्येक रिकॉर्ड को जोड़ते समय जांच सकता है कि क्या पिछला रिकॉर्ड स्वयं द्वारा संग्रहीत किया गया था; यदि यह पाया गया कि मामला है, यह डेटाबेस के अंत में नए के साथ उस रिकॉर्ड को लिख सकता है। इसके बाद भौतिक रिकॉर्ड को देख सकते हैं कि स्लॉट्स से पहले जहां स्थानांतरित रिकॉर्ड निवास करते थे और देखें कि क्या रिकॉर्ड उसके बाद संग्रहीत किया गया था। यदि यह पाया गया कि मामला है, तो यह उस स्थान पर रिकॉर्ड को स्थानांतरित कर सकता है। इस तरह के दृष्टिकोण का उपयोग करने से कई रिकॉर्ड जोड़े में एक साथ जुड़ जाएंगे।
वास्तव में, क्लस्टर किए गए डेटाबेस इससे अधिक परिष्कृत एल्गोरिदम का उपयोग करते हैं। हालांकि, ध्यान देने वाली एक महत्वपूर्ण बात यह है कि डेटाबेस को अपडेट करने के लिए आवश्यक समय और क्रमिक रूप से इसे पढ़ने के लिए आवश्यक समय के बीच एक ट्रेडऑफ है। क्लस्टर किए गए डेटाबेस को बनाए रखने से किसी भी तरह से रिकॉर्ड जोड़ने, हटाने या अपडेट करने के लिए आवश्यक कार्य की मात्रा में वृद्धि होगी, जो सॉर्ट अनुक्रम को प्रभावित करेगा। यदि डेटाबेस को क्रमिक रूप से अधिक बार पढ़ा जाएगा जितना कि इसे अपडेट किया जाएगा, तो क्लस्टरिंग एक बड़ी जीत हो सकती है। यदि इसे अक्सर अपडेट किया जाएगा, लेकिन शायद ही कभी अनुक्रम में पढ़ा जाए, तो क्लस्टरिंग एक बड़ा प्रदर्शन ड्रेन हो सकता है, खासकर यदि अनुक्रम जिस आइटम में डेटाबेस में जोड़ा जाता है वह क्लस्टर इंडेक्स के संबंध में उनके क्रम से स्वतंत्र है।
आप उपरोक्त पदों से सिद्धांत के माध्यम से गए होंगे:
-कस्टर्ड इंडेक्स के रूप में हम सीधे रिकॉर्ड करने के लिए अंक देख सकते हैं यानी इसका प्रत्यक्ष तो यह एक खोज के लिए कम समय लेता है। इसके अतिरिक्त यह इंडेक्स को स्टोर करने के लिए कोई अतिरिक्त मेमोरी / स्पेस नहीं लेगा
-जबकि गैर-संकुल सूचकांक में, यह अप्रत्यक्ष रूप से क्लस्टर इंडेक्स को इंगित करता है तो यह वास्तविक रिकॉर्ड तक पहुंच जाएगा, अपने अप्रत्यक्ष प्रकृति के कारण इसे एक्सेस करने में कुछ और समय लगेगा। इसके अलावा इसे अपनी मेमोरी या स्टोर करने के लिए स्थान की आवश्यकता होती है सूची
// MSDN से कॉपी किया गया, गैर-संकुल सूचकांक का दूसरा बिंदु अन्य उत्तरों में स्पष्ट रूप से उल्लेख नहीं किया गया है।
क्लस्टर किया गया
nonclustered