Kompresję danych można ustawić w tabeli:
CREATE TABLE dbo.SomeTable(
SomeId [bigint] NOT NULL,
OtherId [bigint] NOT NULL,
IsActive [bit] NOT NULL,
CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED
(
SomeId Desc
)
) ON SomePartitionScheme(SomeId) WITH (DATA_COMPRESSION=PAGE)
Można to zdefiniować na kluczu podstawowym:
CREATE TABLE dbo.SomeTable(
SomeId [bigint] NOT NULL,
OtherId [bigint] NOT NULL,
IsActive [bit] NOT NULL,
CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED
(
SomeId Desc
) WITH (DATA_COMPRESSION=PAGE)
) ON SomePartitionScheme(SomeId)
Ale jeśli umieścisz to na obu, otrzymasz następujący błąd:
Opcja DATA_COMPRESSION została określona więcej niż raz dla tabeli lub przynajmniej dla jednej z jej partycji, jeśli tabela jest podzielona na partycje.
Czy jest jakaś różnica w umieszczaniu go na PK vs. na stole?
sql-server
sql-server-2012
compression
Vaccano
źródło
źródło
Odpowiedzi:
Nie chodzi o kompresję klucza podstawowego, ale o kompresję indeksu klastrowego . W przypadku SQL Server indeks klastrowy organizuje strukturę fizyczną tabeli na tym indeksie. Lub, w skrócie, indeks klastrowany jest tabelą. Oznacza to, że kompresja indeksu klastrowanego i kompresja tabeli są funkcjonalnie równoważne. Jeśli utworzysz klucz podstawowy jako indeks nieklastrowany i utrzymasz tabelę podstawową jako stertę, te dwie struktury byłyby inne i osobno skompresowane.
źródło