Articles

compressie in SQL Server: comprimeren en decomprimeren

Posted by admin

op Twitter onlangs vroeg ik:

gebruikt iemand die ik ken de COMPRESS en DECOMPRESS functies in T-SQL?

aan degenen die bevestigend antwoordden, vroeg ik:

Waarom besloot u dit in tegenstelling tot ROW of PAGE compressie?

Joey D ‘ Antoni (blog | Twitter), een van mijn coauteurs, herinnerde me eraan dat rij-en paginacompressie niet werken op LOB-gegevens (“large object”). Dave Dustin (Twitter) en Niko Neugebauer (blog | Twitter) zeiden dat ze specifiek COMPRESS gebruiken voor LOB-gegevens om deze reden.

codewijzigingen

het gebruik van deze functies vereist wijzigingen in bestaande code omdat u de functie COMPRESS moet gebruiken bij het invoegen van gegevens. Dave en Niko deden het door de functionaliteit in het zicht te verbergen.

Als u de code niet kunt wijzigen in uw omgeving, moet u mogelijk gebruik maken van rij-en paginacompressie, of mogelijk columnstore indexen.

Hoe werkt het?

uitgebracht met SQL Server 2016, COMPRESS maakt gebruik van het Open source gzip-compressiealgoritme en kan de gebruikte ruimte met maar liefst 90% verminderen, afhankelijk van het soort gegevens in kwestie. Gegevens worden opgeslagen als het VARBINARY(MAX) gegevenstype:

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

DECOMPRESS wordt gebruikt om de gegevens opnieuw uit te lezen:

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

waar zou ik het gebruiken?

dit is geweldig voor het bijhouden van LOB-gegevens die niet vaak hoeven te worden opgevraagd, bijvoorbeeld grote strings die JSON en XML-tekst bevatten. Zoals in een vorige post is opgemerkt, is het XML-gegevenstype mogelijk niet geschikt voor auditdoeleinden omdat het de gegevens permanent wijzigt, terwijl COMPRESS een geschikt opslagmechanisme zou zijn omdat de gegevens exact hetzelfde zijn wanneer ze opnieuw worden uitgelezen.

zijn er beperkingen?

u kunt gecomprimeerde gegevens niet indexeren, omdat deze zijn opgeslagen als een gecomprimeerde byte-array. Als u een index wilt maken, kunt u rij-of paginacompressie gebruiken en het beste hopen, of een berekende kolom gebruiken met de gegevens die u nodig hebt uit de kolom en die in plaats daarvan indexeren.

Related Post

Leave A Comment