Articles

compressing in SQL Server: COMPRESS and DEKOMPRESS

Posted by admin

on Twitter recently, I asked:

käyttääkö kukaan tuntemani COMPRESS ja DECOMPRESS ominaisuuksia T-SQL: ssä?

niille, jotka vastasivat myöntävästi, kysyin:

mikä sai sinut päättämään tämän sijaan ROW tai PAGE Pakkaus?

Joey D ’ Antoni (blogi | Twitter), yksi kirjoittajistani, muistutti, että rivi-ja sivupakkaukset eivät toimi LOB (”large object”) – tiedoilla. Dave Dustin (Twitter) ja Niko Neugebauer (blogi | Twitter) kertoivat käyttävänsä tästä syystä nimenomaan COMPRESS LOB-tietoihin.

koodin muutokset

näiden funktioiden käyttäminen edellyttää muutoksia olemassa olevaan koodiin, koska sinun on käytettävä COMPRESS – funktiota tietojen lisäämisessä. Dave ja Niko tekivät sen salaamalla toiminnallisuuden näkymien sisällä.

jos et voi tehdä koodimuutoksia ympäristöösi, saatat joutua turvautumaan rivi-ja sivukompressioon tai mahdollisesti kolumnstore-indekseihin.

miten se vaikuttaa?

julkaistu SQL Server 2016: n kanssa, COMPRESS hyödyntää avoimen lähdekoodin gzip-pakkausalgoritmia ja voi vähentää käytettävää tilaa jopa 90% riippuen siitä, millaisesta datasta on kyse. Tiedot tallennetaan VARBINARY(MAX) tietotyyppinä:

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

DECOMPRESS käytetään lukemaan tiedot uudelleen:

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

missä käyttäisin sitä?

tämä on hyvä pitää kirjaa LOB-tiedoista, joita ei tarvitse kysellä usein, esimerkiksi suurista merkkijonoista, jotka sisältävät JSON-ja XML-tekstiä. Kuten aiemmassa viestissä todettiin, XML – tietotyyppi ei välttämättä sovellu tarkastustarkoituksiin, koska se muuttaa tietoja pysyvästi, kun taas COMPRESS olisi sopiva tallennusmekanismi, koska tiedot ovat täsmälleen samat, kun ne luetaan uudelleen.

onko rajoituksia?

pakattua dataa ei voi indeksoida, koska se on tallennettu pakattuna tavujoukkona. Jos haluat luoda indeksin, voit joko käyttää rivin tai sivun pakkausta ja toivoa parasta, tai käyttää laskettua saraketta, joka sisältää tarvittavat tiedot sarakkeesta, ja indeksoida sen sijaan.

Related Post

Leave A Comment