Articles

Komprimering I SQL Server: KOMPRIMERE og DEKOMPRIMERE

Posted by admin

På Twitter nylig spurte jeg:

bruker noen jeg kjenner COMPRESS og DECOMPRESS funksjonene I T-SQL?

til de som svarte bekreftende, spurte jeg:

Hva fikk deg til å bestemme dette i motsetning til ROW eller PAGE komprimering?

Joey D ‘ Antoni (blogg / Twitter), en av mine medforfattere, minnet meg om at rad-og sidekomprimering ikke fungerer på LOB («stort objekt») data. Dave Dustin (Twitter) og Niko Neugebauer (blogg | Twitter) sa at de spesielt bruker COMPRESS for LOB data av denne grunn.

Kodeendringer

Bruk av disse funksjonene krever endringer i eksisterende kode fordi du må bruke funksjonen COMPRESS når du setter inn data. Dave og Niko gjorde det ved å skjule funksjonaliteten inne visninger.

hvis du ikke kan gjøre kodeendringer i miljøet, må du kanskje ty til rad-og sidekomprimering, eller muligens columnstore indekser.

hvordan fungerer det?

Utgitt MED SQL Server 2016, COMPRESS utnytter åpen kildekode gzip-komprimeringsalgoritmen, og kan redusere plassen som brukes med så mye som 90%, avhengig av hvilken type data det gjelder. Data lagres som datatypen VARBINARY(MAX) :

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

DECOMPRESS brukes til å lese dataene ut igjen:

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

Hvor skal jeg bruke den?

dette er flott for å holde styr PÅ LOB data som ikke trenger å bli spurt ofte, for eksempel store strenger som inneholder JSON og XML tekst. SOM nevnt i et tidligere innlegg, KAN XML-datatypen ikke være egnet for revisjonsformål fordi den permanent endrer dataene, mens COMPRESS ville være en passende lagringsmekanisme fordi dataene er nøyaktig de samme når de leses ut igjen.

Er det noen begrensninger?

du kan ikke indeksere komprimerte data, fordi den er lagret som en komprimert byte-matrise. Hvis du vil opprette en indeks, kan du enten bruke rad-eller sidekomprimering og håpe på det beste, eller bruke en beregnet kolonne som inneholder dataene du trenger fra kolonnen, og indeksere det i stedet.

Related Post

Leave A Comment