pe Twitter recent, am întrebat:
are cineva știu folosi
COMPRESS
șiDECOMPRESS
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
sauPAGE
?
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.