Articles

Compression dans SQL Server: COMPRESSER et DÉCOMPRESSER

Posted by admin

Sur Twitter récemment, j’ai demandé:

Quelqu’un que je connais utilise-t-il les fonctionnalités COMPRESS et DECOMPRESS de T-SQL ?

À ceux qui ont répondu par l’affirmative, j’ai demandé:

Qu’est-ce qui vous a fait décider à ce sujet par opposition à la compression ROW ou PAGE?

Joey D’Antoni (blog|Twitter), l’un de mes co-auteurs, m’a rappelé que la compression de lignes et de pages ne fonctionne pas sur les données LOB (« gros objet »). Dave Dustin (Twitter) et Niko Neugebauer (blog | Twitter) ont déclaré qu’ils utilisaient spécifiquement COMPRESS pour les données LOB pour cette raison.

Modifications du code

L’utilisation de ces fonctions nécessite des modifications du code existant car vous devez utiliser la fonction COMPRESS lors de l’insertion de données. Dave et Niko l’ont fait en cachant la fonctionnalité à l’intérieur des vues.

Si vous ne pouvez pas modifier le code de votre environnement, vous devrez peut-être recourir à la compression de lignes et de pages, ou éventuellement à des index columnstore.

Comment ça marche ?

Publié avec SQL Server 2016, COMPRESS exploite l’algorithme de compression gzip open source et peut réduire l’espace utilisé jusqu’à 90% selon le type de données en question. Les données sont stockées en tant que type de données VARBINARY(MAX):

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

DECOMPRESS est utilisé pour relire les données:

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

Où l’utiliserais-je?

Ceci est idéal pour garder une trace des données LOB qui n’ont pas besoin d’être souvent interrogées, par exemple de grandes chaînes contenant du texte JSON et XML. Comme indiqué dans un article précédent, le type de données XML peut ne pas être approprié à des fins d’audit car il modifie en permanence les données, alors que COMPRESS serait un mécanisme de stockage approprié car les données sont exactement les mêmes lorsqu’elles sont lues à nouveau.

Y a-t-il des limitations?

Vous ne pouvez pas indexer les données compressées, car elles sont stockées sous forme de tableau d’octets compressés. Si vous souhaitez créer un index, vous pouvez soit utiliser la compression de ligne ou de page et espérer le meilleur, soit utiliser une colonne calculée contenant les données dont vous avez besoin de la colonne, et l’indexer à la place.

Related Post

Leave A Comment