Articles

compresie în SQL Server: comprimare și decomprimare

Posted by admin

pe Twitter recent, am întrebat:

are cineva știu folosi COMPRESS și DECOMPRESS caracteristici în T-SQL?

pentru cei care au răspuns afirmativ, am întrebat:

ce v-a determinat să decideți acest lucru, spre deosebire de compresia ROW sau PAGE?

Joey D ‘ Antoni (blog | Twitter), unul dintre coautorii mei, mi-a amintit că comprimarea rândurilor și a paginilor nu funcționează pe datele LOB („obiect mare”). Dave Dustin (Twitter) și Niko Neugebauer (blog | Twitter) au spus că folosesc în mod specific COMPRESS pentru datele LOB din acest motiv.

modificări de cod

utilizarea acestor funcții necesită modificări ale codului existent, deoarece trebuie să utilizați funcția COMPRESS la introducerea datelor. Dave și Niko au făcut-o ascunzând funcționalitatea din interiorul vizualizărilor.

dacă nu puteți face modificări de cod în mediul dvs., poate fi necesar să recurgeți la compresia rândurilor și a paginilor sau, eventual, la indici columnstore.

cum funcționează?

lansat cu SQL Server 2016, COMPRESS utilizează algoritmul de compresie gzip open source și poate reduce spațiul utilizat cu până la 90% în funcție de tipul de date în cauză. Datele sunt stocate ca tip de date VARBINARY(MAX) :

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

DECOMPRESS este folosit pentru a citi datele din nou:

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

unde să-l folosesc?

acest lucru este excelent pentru urmărirea datelor LOB care nu trebuie interogate des, de exemplu șiruri mari care conțin text JSON și XML. După cum sa menționat într-o postare anterioară, tipul de date XML poate să nu fie adecvat în scopuri de audit, deoarece modifică permanent datele, în timp ce COMPRESS ar fi un mecanism de stocare adecvat, deoarece datele sunt exact aceleași atunci când sunt citite din nou.

există limitări?

nu puteți indexa datele comprimate, deoarece sunt stocate ca matrice de octeți comprimată. Dacă doriți să creați un index, puteți utiliza fie comprimarea rândului sau a paginii și speranța pentru cele mai bune, fie utilizați o coloană calculată care conține datele de care aveți nevoie din coloană și indexați-o în schimb.

Related Post

Leave A Comment