skip to Main Content

Novas funções de compressão de dados no SQL Server 2016

Vou iniciar uma série de posts sobre as novas funcionalidades do SQL Server 2016, começando pelas funções de compactação de dados.

As versões anteriores já traziam opções de compactação de página e linha, habilitadas com CREATE ou ALTER TABLE.

As funções COMPRESS e DECOMPRESS podem ser utilizadas nos comandos INSERT, UPDATE, SELECT para compactar e descompactar coluna por coluna.  O algoritmo utilizado é o GZip (https://en.wikipedia.org/wiki/Gzip), a aplicação pode utilizar o GZip para compactar e enviar para o SQL Server ou utilizar as funções para compactar.

Exemplo

DROP TABLE IF EXISTS Products

CREATE TABLE Products (
 ProductID int,
 Name nvarchar(50),
 ProductModel nvarchar(50),
 Description nvarchar(400),
 Description_COMP varbinary(max))
go

INSERT INTO Products (ProductID,Name,ProductModel,Description,Description_COMP)
select ProductID,Name,ProductModel,Description,COMPRESS(Description) as Description_COMP
from AdventureWorks.Production.vProductAndDescription

SELECT ProductID,Name,ProductModel,Description,
CAST(DECOMPRESS(Description_COMP) AS NVARCHAR(400)) AS Description_COMP
FROM Products

Além das funções COMPRESS e DECOMPRESS o script acima utiliza outra novidade no SQL Server 2016, o DROP … IF EXISTS, que pode ser utilizado em: AGGREGATE, PROCEDURE, TABLE, ASSEMBLY, TRIGGER, VIEW, TYPE, DATABASE, SCHEMA, USER, DEFAULT, VIEW, FUNCTION, SEQUENCE, INDEX e SYNONYM.

A função COMPRESS retorna VARBINARY, por isso foi utilizado no CREATE TABLE VARBINARY(MAX) na coluna Description_COMP.

Como a função DECOMPRESS também retorna VARBINARY, foi utilizado no último SELECT a função CAST para converter para o tipo de dado original da coluna.

SELECT ProductID,Name,Description,
DATALENGTH(Description) as Tamanho_SemCOMP,
DATALENGTH(Description_COMP) AS Tamanho_COMP
FROM Products

No script acima utilizei a função DATALENGTH, que retorna a quantidade de bytes de uma expressão, para analisar a eficiência da compactação.  Veja que na primeira linha, por ser uma string pequena, a coluna compactada ficou até maior que a original, mas nas demais linhas apresentou ganho.

Até o próximo post.

Saudações Tricolores,
Landry

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Back To Top