Articles

Compresión en SQL Server: COMPRIMIR y DESCOMPRIMIR

Posted by admin

En Twitter recientemente, pregunté:

¿Alguien que conozco usa las funciones COMPRESS y DECOMPRESS de T-SQL?

A los que respondieron afirmativamente, les pregunté:

¿Qué te hizo decidir sobre esto en lugar de la compresión ROW o PAGE?

Joey D’Antoni (blog | Twitter), uno de mis coautores, me recordó que la compresión de filas y páginas no funciona en datos LOB («objetos grandes»). Dave Dustin (Twitter) y Niko Neugebauer (blog | Twitter) dijeron que usan específicamente COMPRESS para datos de LOB por esta razón.

Cambios de código

El uso de estas funciones requiere cambios en el código existente porque necesita usar la función COMPRESS al insertar datos. Dave y Niko lo hicieron ocultando la funcionalidad dentro de las vistas.

Si no puede realizar cambios de código en su entorno, es posible que tenga que recurrir a la compresión de filas y páginas o, posiblemente, a índices de almacén de columnas.

¿Cómo funciona?

Lanzado con SQL Server 2016, COMPRESS aprovecha el algoritmo de compresión gzip de código abierto y puede reducir el espacio utilizado hasta en un 90% dependiendo del tipo de datos en cuestión. Los datos se almacenan como el tipo de datos VARBINARY(MAX) :

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

DECOMPRESS se utiliza para volver a leer los datos:

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

¿Dónde lo usaría?

Esto es ideal para realizar un seguimiento de los datos LOB que no necesitan ser consultados a menudo, por ejemplo, cadenas grandes que contienen texto JSON y XML. Como se señaló en una publicación anterior, el tipo de datos XML puede no ser apropiado para fines de auditoría porque modifica permanentemente los datos, mientras que COMPRESS sería un mecanismo de almacenamiento apropiado porque los datos son exactamente los mismos cuando se leen de nuevo.

¿Hay alguna limitación?

No puede indexar datos comprimidos, porque se almacenan como una matriz de bytes comprimidos. Si desea crear un índice, puede usar compresión de filas o páginas y esperar lo mejor, o usar una columna calculada que contenga los datos que necesita de la columna e indexarla en su lugar.

Related Post

Leave A Comment