गुच्छेदार स्तंभ पर गैर-संकुलित सूचकांक भंडारण


18

SQL सर्वर में, एक गैर-अद्वितीय nonclustered अनुक्रमणिका को किसी रोस्टोरेंस टेबल पर बेस ऑब्जेक्ट के बुकमार्क (RID या क्लस्टरिंग कुंजी) को गैर- संकुलित इंडेक्स संरचना के सभी स्तरों पर शामिल करता है। सभी गैर-सूचकांक सूचकांक कुंजी के हिस्से के रूप में बुकमार्क को सभी सूचकांक स्तरों पर संग्रहीत किया जाता है।

दूसरी ओर, यदि गैर-अनुक्रमित सूचकांक अद्वितीय है , तो बुकमार्क केवल सूचकांक के पत्ती स्तर पर मौजूद है - कुंजी के भाग के रूप में नहीं (बुकमार्क एक या एक से अधिक स्तंभों के रूप में मौजूद है, प्रभाव में)।

SQL सर्वर 2016 में, एक कॉलम-ओरिएंटेड टेबल (जिस पर क्लस्टर्ड कॉलमस्टोर इंडेक्स है) पर नॉन -स्टस्टर्ड बी-ट्री इंडेक्स बनाना संभव है।

  1. क्लस्टर किए गए कॉलमस्टोर टेबल पर एक गैर-संकुलित बी-ट्री इंडेक्स के लिए उपयोग किया जाने वाला 'बुकमार्क' क्या है?
  2. क्या ऊपर वर्णित अद्वितीय और गैर-अद्वितीय गैर-अनुक्रमित अनुक्रमित के बीच अंतर अभी भी लागू होता है?

जवाबों:


17
  1. "बुकमार्क" कॉलमस्टोर इंडेक्स ओरिजिनल लोकेटर (प्रति डिमरी कोरोटकेविच द्वारा "प्रो एसक्यूएल सर्वर इंटरनल्स" है)। यह एक 8-बाइट मान है, जिसमें row_group_idपहले 4-बाइट्स में कॉलमस्टोर इंडेक्स और दूसरा 4-बाइट्स में एक ऑफसेट है।

  2. यदि आप DBCC PAGEगैर-संकुल सूचकांक को देखने के लिए उपयोग करते हैं, तो DBCC PAGEउत्पादन के "विशिष्ट" कॉलम में 8-बाइट कॉलमस्टोर इंडेक्स मूल लोकेटर दिखाई देता है । इससे पता चलता है कि एक अद्वितीय गैर-संकुल सूचकांक को कॉलमस्टोर पंक्ति लोकेटर को शामिल करने की आवश्यकता नहीं है, जबकि एक गैर-अद्वितीय गैर-क्लस्टर सूचकांक करता है।

निम्न कोड समान स्तंभ पर एक अद्वितीय और गैर-अद्वितीय बी-ट्री नॉनक्लेस्टेड इंडेक्स के साथ एक स्तंभ-संगठित तालिका बनाता है:

CREATE TABLE dbo.Heapish
(
    c1 bigint NOT NULL,
    c2 bigint NOT NULL,
    INDEX CCI_dbo_Heapish CLUSTERED COLUMNSTORE
);
GO
INSERT dbo.Heapish WITH (TABLOCKX)
    (c1, c2)
SELECT TOP (1024 * 1024 * 8)
    c1 = ROW_NUMBER() OVER
        (ORDER BY C1.[object_id], C1.column_id),
    c2 = ROW_NUMBER() OVER
        (ORDER BY C1.[object_id], C1.column_id)
FROM master.sys.columns AS C1
CROSS JOIN master.sys.columns AS C2
ORDER BY
    c1
OPTION (MAXDOP 1);
GO
CREATE UNIQUE NONCLUSTERED INDEX UNIQUE_c2 ON dbo.Heapish (c2) WITH (MAXDOP = 1);
CREATE NONCLUSTERED INDEX NONUNIQUE_c2 ON dbo.Heapish (c2) WITH (MAXDOP = 1);

हम उपयोग कर रहे बी-ट्री के विभिन्न स्तरों पर सूचकांक पंक्ति का आकार देख सकते हैं sys.dm_db_index_physical_stats:

SELECT
    DDIPS.index_level,
    DDIPS.page_count,
    DDIPS.record_count,
    DDIPS.min_record_size_in_bytes,
    DDIPS.max_record_size_in_bytes
FROM sys.dm_db_index_physical_stats
(
    DB_ID(),
    OBJECT_ID(N'dbo.Heapish', N'U'),
    INDEXPROPERTY(OBJECT_ID(N'dbo.Heapish', N'U'), N'UNIQUE_c2', 'IndexID'),
    NULL, 'DETAILED'
) AS DDIPS;

SELECT
    DDIPS.index_level,
    DDIPS.page_count,
    DDIPS.record_count,
    DDIPS.min_record_size_in_bytes,
    DDIPS.max_record_size_in_bytes
FROM sys.dm_db_index_physical_stats
(
    DB_ID(),
    OBJECT_ID(N'dbo.Heapish', N'U'),
    INDEXPROPERTY(OBJECT_ID(N'dbo.Heapish', N'U'), N'NONUNIQUE_c2', 'IndexID'),
    NULL, 'DETAILED'
) AS DDIPS;

आउटपुट है:

अनोखा सूचकांक

नॉनक्युकि इंडेक्स

पत्ती के स्तर पर दोनों संरचनाओं का आकार समान होता है, लेकिन 8-बाइट वाले कॉलमस्टोर लोकेटर के कारण नॉन-लीफ नॉनक्लेस्टेड इंडेक्स नॉन-लीफ लेवल पर यूनीक नॉनक्लेस्टर्ड इंडेक्स से 12 बाइट्स बड़ा होता है, साथ ही पहले वेरिएबल के लिए ओवरहेड का 4 बाइट्स एक पंक्ति में -length स्तंभ (uniquifier परिवर्तनशील लंबाई है)।


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