Articles

Komprimierung in SQL Server: KOMPRIMIEREN und DEKOMPRIMIEREN

Posted by admin

Auf Twitter habe ich kürzlich gefragt:

Verwendet jemand, den ich kenne, die Funktionen COMPRESS und DECOMPRESS in T-SQL?

An diejenigen, die dies bejahten, fragte ich:

Was hat Sie dazu bewogen, sich im Gegensatz zur Komprimierung von ROW oder PAGE zu entscheiden?

Joey D’Antoni (Blog | Twitter), einer meiner Co-Autoren, erinnerte mich daran, dass die Zeilen- und Seitenkomprimierung bei LOB-Daten („Large Object“) nicht funktioniert. Dave Dustin (Twitter) und Niko Neugebauer (Blog | Twitter) gaben an, dass sie aus diesem Grund speziell COMPRESS für LOB-Daten verwenden.

Codeänderungen

Die Verwendung dieser Funktionen erfordert Änderungen am vorhandenen Code, da Sie beim Einfügen von Daten die Funktion COMPRESS verwenden müssen. Dave und Niko haben es getan, indem sie die Funktionalität der Innenansichten verborgen haben.

Wenn Sie keine Codeänderungen an Ihrer Umgebung vornehmen können, müssen Sie möglicherweise auf Zeilen- und Seitenkomprimierung oder möglicherweise Columnstore-Indizes zurückgreifen.

Wie funktioniert es?

COMPRESSwurde mit SQL Server 2016 veröffentlicht und nutzt den Open-Source-gzip-Komprimierungsalgorithmus und kann den verwendeten Speicherplatz je nach Art der betreffenden Daten um bis zu 90% reduzieren. Daten werden als Datentyp VARBINARY(MAX) gespeichert:

INSERT INTO dbo.Table1 (Col1, Col2) VALUES ('C0001', COMPRESS('<long string goes here>'));

DECOMPRESS wird verwendet, um die Daten wieder auszulesen:

SELECT Col1, DECOMPRESS(Col2) AS Col2 FROM dbo.Table1 WHERE Col1 = 'C0001';

Wo würde ich es verwenden?

Dies eignet sich hervorragend, um LOB-Daten zu verfolgen, die nicht häufig abgefragt werden müssen, z. B. große Zeichenfolgen mit JSON- und XML-Text. Wie in einem früheren Beitrag erwähnt, ist der XML-Datentyp möglicherweise nicht für Überwachungszwecke geeignet, da er die Daten dauerhaft ändert, während COMPRESS ein geeigneter Speichermechanismus wäre, da die Daten beim erneuten Auslesen genau gleich sind.

Gibt es Einschränkungen?

Sie können komprimierte Daten nicht indizieren, da sie als komprimiertes Byte-Array gespeichert sind. Wenn Sie einen Index erstellen möchten, können Sie entweder die Zeilen- oder Seitenkomprimierung verwenden und auf das Beste hoffen oder eine berechnete Spalte verwenden, die die benötigten Daten aus der Spalte enthält, und diese stattdessen indizieren.

Related Post

Leave A Comment