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 do SQL Server 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 então utilizar as funções para compactar direto no T-SQL.
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
utilizada no CREATE TABLE VARBINARY(MAX) na coluna Description_COMP.
Como a função DECOMPRESS também retorna VARBINARY, foi
utilizada 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
Nenhum comentário:
Postar um comentário