Kiedy tworzysz tabelę w SQL Server, masz możliwość skorzystania z kompresji danych.
Kompresja danych pomaga zmniejszyć rozmiar bazy danych. Może również pomóc poprawić wydajność obciążeń intensywnie korzystających z operacji we/wy, ponieważ dane są przechowywane na mniejszej liczbie stron, co zmniejsza liczbę stron, które zapytania muszą odczytać z dysku.
Aby to zrobić, użyj DATA_COMPRESSION
opcja podczas tworzenia tabeli.
Przykład
Oto przykład do zademonstrowania.
CREATE TABLE Movies (
MovieId int IDENTITY(1,1) PRIMARY KEY NOT NULL,
MovieName nvarchar(200)
)
WITH (DATA_COMPRESSION = ROW);
W tym przypadku używam kompresji wierszy.
Poniższe używa kompresji stron.
CREATE TABLE Movies (
MovieId int IDENTITY(1,1) PRIMARY KEY NOT NULL,
MovieName nvarchar(200)
)
WITH (DATA_COMPRESSION = PAGE);
Jak usunąć kompresję
Możesz usunąć kompresję za pomocą ALTER TABLE
instrukcja odbudowania tabeli przy użyciu NONE
jako typ kompresji.
ALTER TABLE MOVIES
REBUILD WITH (DATA_COMPRESSION = NONE);
Tabele kolumnowe
Jeśli używasz tabel magazynu kolumn (tabele przechowywane z klastrowanym indeksem magazynu kolumn), powyższe typy kompresji nie mają zastosowania. W tym przypadku twoje opcje kompresji to COLUMNSTORE
i COLUMNSTORE_ARCHIVE
.
Wyniki kompresji mogą się różnić
Stopień kompresji, jaki uzyskasz, będzie zależeć od danych i rodzaju kompresji.
ROW
kompresja, na przykład, usuwa niepotrzebne bajty z wartości kolumn, przechowując je w formacie o zmiennej długości. PAGE
z drugiej strony kompresja przechowuje powtarzające się wartości tylko raz na stronę i ustawia wskaźnik z odpowiednich kolumn na stronie.
Czasami może się okazać, że kompresja obiektu nie zawsze zmniejsza jego rozmiar, a w niektórych przypadkach może nawet zwiększyć jego rozmiar.
Może się tak zdarzyć, jeśli Twoje kolumny używają typu danych, który nie korzysta z kompresji.
Ponadto kompresja wierszy zmniejsza obciążenie metadanych, ale w niektórych przypadkach obciążenie może być większe niż w przypadku starego formatu przechowywania.
Jeśli Twoje dane nie uzyskują żadnych korzyści z kompresji ze względu na ich typ danych, prawdopodobne jest, że obciążenie spowoduje wzrost wymagań dotyczących pamięci, a nie ich spadek.
Jednak różnice w rozmiarze kompresji będą również zależeć od rzeczywistych danych. Na przykład, jeśli masz znak(10) kolumna, kompresja usunie wszystkie końcowe znaki dopełnienia. Jeśli masz wiele wierszy ze znakami dopełnienia końcowego, powinieneś uzyskać lepszy wynik niż w przypadku braku (lub kilku) wierszy ze znakami dopełnienia końcowego.