"बुकमार्क" कॉलमस्टोर इंडेक्स ओरिजिनल लोकेटर (प्रति डिमरी कोरोटकेविच द्वारा "प्रो एसक्यूएल सर्वर इंटरनल्स" है)। यह एक 8-बाइट मान है, जिसमें row_group_id
पहले 4-बाइट्स में कॉलमस्टोर इंडेक्स और दूसरा 4-बाइट्स में एक ऑफसेट है।
यदि आप 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 परिवर्तनशील लंबाई है)।