Wenn Sie eine Tabelle in SQL Server erstellen, haben Sie die Möglichkeit, die Datenkomprimierung zu verwenden.
Die Datenkomprimierung hilft, die Größe der Datenbank zu reduzieren. Es kann auch dazu beitragen, die Leistung von E/A-intensiven Workloads zu verbessern, da die Daten auf weniger Seiten gespeichert werden, wodurch die Anzahl der Seiten reduziert wird, die Abfragen von der Festplatte lesen müssen.
Verwenden Sie dazu den DATA_COMPRESSION
Option beim Erstellen der Tabelle.
Beispiel
Hier ist ein Beispiel zur Veranschaulichung.
CREATE TABLE Movies (
MovieId int IDENTITY(1,1) PRIMARY KEY NOT NULL,
MovieName nvarchar(200)
)
WITH (DATA_COMPRESSION = ROW);
In diesem Fall verwende ich die Zeilenkomprimierung.
Im Folgenden wird die Seitenkomprimierung verwendet.
CREATE TABLE Movies (
MovieId int IDENTITY(1,1) PRIMARY KEY NOT NULL,
MovieName nvarchar(200)
)
WITH (DATA_COMPRESSION = PAGE);
Komprimierung entfernen
Sie können die Komprimierung entfernen, indem Sie ALTER TABLE
verwenden -Anweisung, um die Tabelle neu zu erstellen, während NONE
verwendet wird als Komprimierungstyp.
ALTER TABLE MOVIES
REBUILD WITH (DATA_COMPRESSION = NONE);
Columnstore-Tabellen
Wenn Sie Columnstore-Tabellen verwenden (Tabellen, die mit einem gruppierten Columnstore-Index gespeichert sind), gelten die oben genannten Komprimierungstypen nicht. In diesem Fall sind Ihre Komprimierungsoptionen COLUMNSTORE
und COLUMNSTORE_ARCHIVE
.
Komprimierungsergebnisse können variieren
Der Grad der Komprimierung hängt von den Daten und der Art der Komprimierung ab.
ROW
Die Komprimierung entfernt beispielsweise nicht benötigte Bytes aus den Spaltenwerten, indem sie in einem Format mit variabler Länge gespeichert werden. PAGE
Die Komprimierung hingegen speichert die sich wiederholenden Werte nur einmal pro Seite und setzt den Zeiger von den entsprechenden Spalten innerhalb der Seite.
Manchmal stellen Sie möglicherweise fest, dass das Komprimieren eines Objekts seine Größe nicht immer verringert und in einigen Fällen sogar erhöht seine Größe.
Dies könnte passieren, wenn Ihre Spalten einen Datentyp verwenden, der nicht von der Komprimierung profitiert.
Außerdem reduziert die Zeilenkomprimierung den Metadaten-Overhead, aber in einigen Fällen kann der Overhead größer sein als beim alten Speicherformat.
Wenn Ihre Daten aufgrund ihres Datentyps nicht von der Komprimierung profitieren, führt der Overhead wahrscheinlich eher zu einer Erhöhung als zu einer Verringerung der Speicheranforderungen.
Abweichungen in der Komprimierungsgröße hängen jedoch auch von den tatsächlichen Daten ab. Zum Beispiel, wenn Sie ein char(10) haben -Spalte entfernt die Komprimierung alle nachgestellten Füllzeichen. Wenn Sie viele Zeilen mit abschließenden Füllzeichen haben, sollten Sie ein besseres Ergebnis erzielen, als wenn Sie keine (oder wenige) Zeilen mit abschließenden Füllzeichen haben.