"Bookmark" adalah locator asli indeks storestore (per "Pro SQL Server Internals" oleh Dmitri Korotkevitch). Ini adalah nilai 8-byte, dengan indeks kolomstore row_group_id
di 4-byte pertama dan offset di 4-byte kedua.
Jika Anda menggunakan DBCC PAGE
untuk melihat indeks non-clustered, locator asli indexstore 8-byte kolom muncul di kolom "uniquifier" dari DBCC PAGE
output. Ini menunjukkan bahwa indeks non-clustered unik tidak perlu menyertakan locator baris columnstore, sedangkan indeks non-clustered non-unik tidak.
Kode berikut ini membuat tabel yang diorganisir kolom toko dengan indeks b-tree b-tree yang unik dan tidak unik pada kolom yang sama:
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);
Kita dapat melihat ukuran baris indeks pada berbagai tingkat b-tree menggunakan 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;
Outputnya adalah:
Kedua struktur memiliki ukuran baris yang sama di tingkat daun, tetapi indeks nonclustered nonunique adalah 12 byte lebih besar dari indeks nonclustered unik di tingkat non-daun karena locator kolomstore 8-byte, ditambah 4 byte overhead untuk variabel pertama -panjang kolom dalam satu baris (uniquifier adalah panjang variabel).