दिलचस्प पोस्ट
समझदारी से वैज्ञानिक संकेतन पार्सिंग? "इंडेन्टेशन में टैब और रिक्त स्थान का असंगत उपयोग" क्यों WCF सूची के बजाय <myObject वापस आती है, जैसे मैं उम्मीद कर रहा था? एएसपी। नेट 2012 जेनोवा के साथ विनीत मान्यकरण रिकर्सिव शामिल करने और एकाधिक प्रतीकों की परिभाषाओं को रोकने में क्यों शामिल नहीं हैं? पैरामीटर के रूप में जावा पास विधि खिड़कियों में एक कंसोल में cout को पुनर्निर्देशित करना केस असंवेदनशील jQuery विशेषता चयनकर्ता जेएस को गणित करने के लिए मजबूर कैसे करें, इसके बजाय दो स्ट्रिंग को एक साथ रखा जाए जावा ने गैर-दोहराव यादृच्छिक संख्या उत्पन्न की एसक्यूएल सर्वर बनाम बनाम प्रदर्शन यूनिकोड वर्णों को PowerShell प्रॉम्प्ट पर प्रिंट करना PHP का उपयोग करके पूर्ण यूआरएल में रिश्तेदार पथ को ट्रांसफ़ॉर्म करें यूआरएल चर में स्लैश डायरेक्टरी के साथ निर्देशिका को नहीं हटाया जा सकता। हटाएं (पथ, सच)

क्लस्टर्ड और गैर क्लस्टर्ड इंडेक्स वास्तव में क्या मतलब है?

मेरे पास डीबी के लिए सीमित निवेश है और केवल एक प्रोग्राम प्रोग्रामर के रूप में डीबी का इस्तेमाल किया है। मैं क्लस्टर और गैर क्लस्टर अनुक्रमित के बारे में जानना चाहता हूं। मैं googled और मैं क्या मिला था:

एक संकलित सूचकांक एक विशेष प्रकार का सूचकांक होता है जो तालिका में अभिलेखों को दर्ज करने के तरीके को शारीरिक रूप से संग्रहीत करता है। इसलिए तालिका में केवल एक क्लस्टर इंडेक्स हो सकता है क्लस्टर किए गए इंडेक्स के पत्ते के नोड्स में डेटा पेज होते हैं। एक नॉनक्लस्टर्ड इंडेक्स एक विशेष प्रकार का इंडेक्स है जिसमें सूचकांक का तार्किक क्रम डिस्क पर पंक्तियों के भौतिक संग्रहित ऑर्डर से मेल नहीं खाता है। एक गैर-क्लस्टर्ड इंडेक्स के पत्ते नोड में डेटा पेज शामिल नहीं है। इसके बजाय, पत्ती के नोड्स में सूचक पंक्तियां होती हैं

जो कुछ मैंने पाया है, वह एक क्लस्टर और एक गैर-क्लस्टर इंडेक्स के बीच अंतर क्या है? ।

क्या कोई सादा अंग्रेजी में यह समझा सकता है?

वेब के समाधान से एकत्रित समाधान "क्लस्टर्ड और गैर क्लस्टर्ड इंडेक्स वास्तव में क्या मतलब है?"

संकुल सूचकांक के साथ, पंक्तियों को भौतिक रूप से डिस्क पर उसी क्रम में संग्रहित किया जाता है, क्योंकि सूचकांक इसलिए, केवल एक क्लस्टर इंडेक्स हो सकता है

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

यदि आप सभी कॉलम वापस प्राप्त करना चाहते हैं, तो यह आम तौर पर एक संकलित सूचकांक से पढ़ने के लिए तेज़ है। आपको पहले सूचकांक और फिर तालिका में जाने की ज़रूरत नहीं है।

एक संकलित सूचकांक के साथ तालिका में लेखन धीमा हो सकता है, अगर डेटा को पुनर्व्यवस्थित करने की आवश्यकता होती है

एक संकुल सूचकांक का मतलब है कि आप डेटाबेस को करीब से मूल्यों को संग्रहीत करने के लिए कह रहे हैं जो वास्तव में डिस्क पर एक दूसरे के करीब हैं। इसमें क्लस्टर किए गए सूचकांक मूल्यों के कुछ हिस्सों में गिरने वाले रिकॉर्डों का तेज़ स्कैन / पुनर्प्राप्ति का लाभ है।

उदाहरण के लिए, आपके पास दो तालिकाओं, ग्राहक और आदेश हैं:

Customer ---------- ID Name Address Order ---------- ID CustomerID Price 

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

पीएस, ग्राहक आईडी पर सूचकांक स्पष्ट रूप से अनूठा नहीं होगा, इसलिए आपको या तो सूचकांक को "अनिकूवर" करने के लिए दूसरा क्षेत्र जोड़ने की आवश्यकता है या डेटाबेस को आपके लिए हैंडल करने दें, लेकिन यह एक और कहानी है

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

एसक्यूएल सर्वर पंक्ति उन्मुख भंडार में क्लस्टर और नॉनक्लस्टर्ड इंडेक्स दोनों को बी पेड़ों के रूप में व्यवस्थित किया जाता है।

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

( छवि स्रोत )

संकुल अनुक्रमित और गैर-संकुल अनुक्रमितों के बीच मुख्य अंतर यह है कि संकुल सूचकांक के पत्ते का स्तर तालिका है। इसके दो प्रभाव हैं

  1. क्लस्टर किए गए इंडेक्स पेज पृष्ठों पर पंक्तियाँ हमेशा तालिका में प्रत्येक (गैर स्पर्स) कॉलम के लिए कुछ होती हैं (या तो मान, या वास्तविक मान के लिए एक सूचक)।
  2. संकुल सूचकांक तालिका की प्राथमिक प्रति है

गैर संकुल अनुक्रमित INCLUDE खंड (एसक्यूएल सर्वर 2005 के बाद से) का उपयोग करके स्पष्ट रूप से सभी गैर-प्रमुख स्तंभों को INCLUDE करने के लिए बिंदु 1 भी कर सकते हैं, लेकिन वे माध्यमिक अभ्यावेदन कर रहे हैं और डेटा के चारों ओर एक ही प्रतिलिपि (तालिका में ही) है।

 CREATE TABLE T ( A INT, B INT, C INT, D INT ) CREATE UNIQUE CLUSTERED INDEX ci ON T(A,B) CREATE UNIQUE NONCLUSTERED INDEX nci ON T(A,B) INCLUDE (C,D) 

उपर्युक्त दो अनुक्रमिक लगभग समान होंगे। A,B और A,B,C,D वाले पत्ते के स्तर वाले पेजों के लिए ऊपरी स्तर के इंडेक्स पेज हैं

प्रति तालिका में केवल एक संकलित अनुक्रमणिका हो सकती है, क्योंकि डेटा पंक्तियों को केवल एक ही क्रम में सॉर्ट किया जा सकता है।

एसक्यूएल सर्वर पुस्तकों से उपरोक्त उद्धरण ऑनलाइन बहुत भ्रम पैदा करता है (क्योंकि यह स्पष्ट रूप से भ्रामक है)। मेरी राय में यह उतना बेहतर होगा जैसा

प्रति मेज पर केवल एक संकलित अनुक्रमणिका हो सकती है, क्योंकि संकुल सूचक की पत्ती स्तर की पंक्तियाँ तालिका पंक्तियाँ हैं।

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

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

यह बेतुका कार्यान्वयन होगा उदाहरण के लिए यदि एक पंक्ति को 4 जीबी तालिका के बीच में डाला जाता है तो SQL सर्वर को फाइल में 2 जीबी डेटा की प्रतिलिपि बनाने की ज़रूरत नहीं है ताकि नई डाली गई पंक्ति के लिए जगह बन सके।

इसके बजाय एक पृष्ठ विभाजन होता है। क्लस्टर और गैर क्लस्टर अनुक्रमित दोनों के पत्ते स्तर पर प्रत्येक पृष्ठ में तार्किक कुंजी क्रम में अगले और पिछले पृष्ठ का पता ( File:Page ) है। इन पृष्ठों को या तो निकट या कुंजी क्रम में नहीं होना चाहिए

जैसे लिंक किए गए पृष्ठ श्रृंखला 1:2000 <-> 1:157 <-> 1:7053

जब कोई पृष्ठ विभाजन हो जाता है, तो फ़ाइल समूह में कहीं से भी एक नया पृष्ठ आवंटित किया जाता है (या तो एक मिश्रित हद तक, छोटे तालिकाओं के लिए, या उस ऑब्जेक्ट से जुड़ी एक समान समान सीमा या एक नए आवंटित वर्दी की सीमा)। यह भी एक ही फाइल में नहीं हो सकता है अगर फ़ाइल समूह में एक से अधिक होते हैं

जिस डिग्री को लॉजिकल ऑर्डर और संगीतमता आदर्शीकृत भौतिक संस्करण से अलग होती है, तार्किक विखंडन की डिग्री है।

एक ही फाइल के साथ एक नया बनाया डेटाबेस में मैं निम्नलिखित दौड़ा

 CREATE TABLE T ( X TINYINT NOT NULL, Y CHAR(3000) NULL ); CREATE CLUSTERED INDEX ix ON T(X); GO --Insert 100 rows with values 1 - 100 in random order DECLARE @C1 AS CURSOR, @X AS INT SET @C1 = CURSOR FAST_FORWARD FOR SELECT number FROM master..spt_values WHERE type = 'P' AND number BETWEEN 1 AND 100 ORDER BY CRYPT_GEN_RANDOM(4) OPEN @C1; FETCH NEXT FROM @C1 INTO @X; WHILE @@FETCH_STATUS = 0 BEGIN INSERT INTO T (X) VALUES (@X); FETCH NEXT FROM @C1 INTO @X; END 

उसके बाद पेज लेआउट को चेक किया

 SELECT page_id, X, geometry::Point(page_id, X, 0).STBuffer(1) FROM T CROSS APPLY sys.fn_PhysLocCracker( %% physloc %% ) ORDER BY page_id 

परिणाम सभी जगह पर थे कुंजी क्रम में पहली पंक्ति (मूल्य 1 के साथ – नीचे तीर के साथ प्रकाश डाला गया) लगभग अंतिम भौतिक पृष्ठ पर था

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

तर्कसंगत क्रम और भौतिक क्रम के बीच संबंध बढ़ाने के लिए किसी सूचकांक को पुनर्निर्माण या पुनर्गठन द्वारा विभाजित किया जा सकता है या कम किया जा सकता है।

चलने के बाद

 ALTER INDEX ix ON T REBUILD; 

मुझे निम्नलिखित मिला है

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

यदि तालिका में कोई क्लस्टर नहीं है तो उसे एक ढेर कहा जाता है।

गैर संकुल अनुक्रमित या तो एक ढेर या एक संकुल सूचकांक पर बनाया जा सकता है। वे हमेशा आधार तालिका में एक पंक्ति लोकेटर को वापस रखते हैं ढेर के मामले में यह एक भौतिक पंक्ति पहचानकर्ता (छुटकारा) है और इसमें तीन घटक होते हैं (फ़ाइल: पृष्ठ: स्लॉट)। क्लस्टर किए गए इंडेक्स के मामले में पंक्ति लोकेटर तार्किक है (क्लस्टर इंडेक्स कुंजी)।

उत्तरार्द्ध मामले के लिए अगर गैर संकुल सूचकांक पहले से ही स्वाभाविक रूप से सीआई कुंजी स्तंभ (एस) को एनसीआई कुंजी कॉलम के रूप में INCLUDE या इसमें INCLUDE डी कॉलम तो कुछ भी नहीं जोड़ा गया है अन्यथा लापता सीआई कुंजी कॉलम (एस) चुपचाप एनसीआई में शामिल हो जाते हैं

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

क्लस्टर्ड uniquifier एक uniquifier मिलता है जो किसी मौजूदा पंक्ति के डुप्लिकेट कुंजी मानों के साथ किसी भी पंक्तियों के लिए जोड़ा जाता है यह सिर्फ एक आरोही पूर्णांक है

अनन्य SQL सर्वर के रूप में घोषित नहीं किए गए गैर संकुल अनुक्रमित करने के लिए चुपचाप पंक्ति नियंत्रक को गैर संकुल सूचक कुंजी में जोड़ता है। यह सभी पंक्तियों पर लागू होता है, न कि केवल जो वास्तव में डुप्लिकेट हैं

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

हालांकि स्तंभ संग्रह डेटा वास्तव में किसी भी कुंजी पर "क्लस्टर्ड" नहीं है, हमने एक संकलित सूचकांक के रूप में प्राथमिक सूचकांक का संदर्भ देने के पारंपरिक एसक्यूएल सर्वर सम्मेलन को बनाए रखने का निर्णय लिया है।

क्लस्टर और गैर-क्लस्टर अनुक्रमित की कुछ विशेषताओं के नीचे खोजें:

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

  1. संकुल अनुक्रमित अनुक्रमित होते हैं जो किसी SQL तालिका में पंक्तियों की विशिष्ट पहचान करते हैं।
  2. प्रत्येक तालिका में एक क्लस्टर्ड इंडेक्स हो सकता है।
  3. आप एक संकलित अनुक्रमणिका बना सकते हैं जो एक से अधिक कॉलम को कवर करता है। उदाहरण के लिए: create Index index_name(col1, col2, col.....)
  4. डिफ़ॉल्ट रूप से, एक प्राथमिक कुंजी के साथ एक कॉलम पहले से ही संकुल सूचकांक है

गैर-क्लस्टर इंडेक्स

  1. गैर-संकुल अनुक्रमित सरल अनुक्रमित हैं। उनका उपयोग सिर्फ डेटा के तेज पुनर्प्राप्ति के लिए किया जाता है। निश्चित रूप से अनूठा डेटा नहीं है

मुझे पता है यह एक बहुत पुराना सवाल है, लेकिन मैंने सोचा कि मैं ऊपर दिए गए अच्छे उत्तरों को स्पष्ट करने में मदद करने के लिए एक समानता की पेशकश करेगा।

क्लासर्ड इंडेक्स

यदि आप किसी सार्वजनिक पुस्तकालय में चलते हैं, तो आप पाएंगे कि किताबें सभी को एक विशेष क्रम में व्यवस्थित की जाती हैं (सबसे अधिक संभावना डेवी डेसिमल सिस्टम, या डीडीएस)। यह पुस्तकों के "संकुल सूचकांक" से मेल खाती है यदि आप चाहते हैं कि किताब के लिए डीडीएस # 005.7565 F736s , तो आप उस 005.7565 F736s की पंक्ति का पता लगाकर शुरू कर देंगे, जिसे 001-099 या ऐसा कुछ लेबल किया गया है। (स्टैक्स के अंत में यह अंतराप चिह्न इंडेक्स में एक "इंटरमीडिएट नोड" से मेल खाती है।) अंततः आप 005.7450 - 005.7600 नामक विशिष्ट शेल्फ के नीचे ड्रिल करेंगे, तब तक आप स्कैन करेंगे जब तक कि आपको निर्दिष्ट डीडीएस # , और उस बिंदु पर आपको अपनी पुस्तक मिली है

गैर- CLUSTERED INDEX

लेकिन अगर आप पुस्तकालय में अपनी किताब की याददाश्त के डीडीएस # के साथ नहीं आए, तो आपको आपकी सहायता करने के लिए एक दूसरे सूचकांक की आवश्यकता होगी। पुराने दिनों में आप "कार्ड कैटलॉग" के रूप में जाना जाता दराज के एक शानदार ब्यूरो के पुस्तकालय के सामने मिलेगा। इसमें हजारों 3×5 कार्ड थे – प्रत्येक पुस्तक के लिए, वर्णमाला क्रम में क्रमबद्ध (शीर्षक से, शायद)। यह "गैर-संकुल सूचकांक" से मेल खाती है ये कार्ड कैटलॉग एक पदानुक्रमित संरचना में व्यवस्थित किए गए थे, ताकि प्रत्येक दराज को उस कार्ड की श्रेणी के साथ लेबल किया जाएगा ( Ka - Kl , उदाहरण के लिए; अर्थात, "मध्यवर्ती नोड")। एक बार फिर, जब तक आप अपनी पुस्तक नहीं मिलते, तब तक आप ड्रिल करेंगे, लेकिन इस मामले में, एक बार जब आप इसे (यानी "पत्ती नोड") मिल गए हैं, तो आपके पास किताब ही नहीं है, लेकिन केवल एक सूचकांक संख्या (डीडीएस #) जिसके साथ आप संकुल सूचकांक में वास्तविक पुस्तक पा सकते हैं।

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

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

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

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

तालिका में डेटा पंक्ति केवल एक बार क्रमबद्ध क्रम में संग्रहित होती है, जब तालिका में एक संकलित सूचकांक होता है जब एक तालिका में एक संकुल सूचकांक होता है, तो तालिका को एक क्लस्टर तालिका कहा जाता है। यदि एक तालिका में कोई क्लस्टर नहीं है, तो इसकी डेटा पंक्तियों को एक अनारोडेड संरचना में संग्रहित किया जाता है जिसे ढेर कहा जाता है।

nonclustered

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

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

संदर्भ: https://docs.microsoft.com/en-us/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described