Kümelenmiş sütun deposunda kümelenmemiş dizin depolaması


18

SQL Server'da, bir satır deposu tablosundaki benzersiz kümelenmemiş bir dizin , kümelenmemiş dizin yapısının tüm düzeylerinde temel nesnenin yer işaretini (RID veya kümeleme anahtarı) içerir. Yer imi, tüm dizin düzeylerinde kümelenmemiş dizin anahtarının bir parçası olarak saklanır .

Öte yandan, kümelenmemiş dizin benzersizse , yer işareti yalnızca dizinin yaprak düzeyinde bulunur - anahtarın bir parçası olarak değil (yer işareti, aslında bir veya daha fazla dahil edilen sütun olarak bulunur).

SQL Server 2016'da, sütun yönelimli bir tabloda (kümelenmiş bir sütun deposu dizini olan) kümelenmemiş bir b-ağacı dizini oluşturmak mümkündür.

  1. Kümelenmiş bir sütun deposu tablosunda kümelenmemiş bir b-ağacı dizini için kullanılan 'yer işareti' nedir?
  2. Yukarıda açıklanan benzersiz ve benzersiz olmayan kümelenmemiş dizinler arasındaki farklar hala geçerli mi?

Yanıtlar:


17
  1. "Yer imi", sütun deposu dizin orijinal konumlandırıcıdır (Dmitri Korotkevitch tarafından "Pro SQL Server Internals" uyarınca). Bu, 8 baytlık bir değerdir; sütun deposu dizini row_group_idilk 4 baytta ve ikinci 4 baytta bir ofsettir.

  2. DBCC PAGEKümelenmemiş dizine bakmak için kullanırsanız , 8 bayt sütun mağaza dizini özgün konumlandırıcı çıktının "benzersiz" sütununda görünür DBCC PAGE. Bir o bu gösterileri benzersiz bir halbuki olmayan kümelenmiş indeks, columnstore satır bulma aracı dahil etmek gerekmez benzersiz olmayan olmayan kümelenmiş dizin yok.

Aşağıdaki kod, aynı sütun üzerinde benzersiz ve benzersiz olmayan bir b ağacı kümelenmemiş dizinine sahip, sütun mağaza tarafından düzenlenen bir tablo oluşturur:

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);

İndeks satırının boyutunu b-ağacının farklı seviyelerinde kullanarak görebiliriz 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;

Çıktı:

Benzersiz dizin

Nonunqiue endeksi

Her iki yapı da yaprak düzeyinde aynı satır boyutuna sahiptir, ancak 8 baytlık sütun deposu konumlandırıcısı nedeniyle yapraksız seviyelerde benzersiz kümelenmemiş endeks, yapraksız seviyelerde benzersiz kümelenmemiş endeksten 12 bayt daha büyüktür ve ilk değişken için 4 bayt ek yük -bir satırda uzunluk sütunu (tek değişken değişken uzunluktadır).


Ya da ilgili satır delta deposundaysa? Delta mağazası sıkıştırılırken ne olur?
Artashes Khachatryan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.