Comparativo entre Varchar e BigInt

Propaganda
Comparativo entre Varchar(14) e BigInt
Uma das principais análises necessárias que devemos fazer antes de armazenar um dado
dentro de uma table é verificar qual seria o melhor ou o mais indicado datatype para contêr o
valor.
Pensando nisso, um dos casos mais interessantes em relação á esta análise relaciona-se com o
armazenamento de informações vinculadas ao CPF ou CNPJ.
Como todos sabem o CNPJ é um Cadastro Nacional de Pessoa Jurídica existente no Brasil, este
cadastro é composto basicamente por 14(quatorze) digitos numéricos. Justamente por esta
quantidade de números um pouco acima do normal que se ínicia uma grande discussão.
O que é melhor fazer armazenar armazenar estes valores em um datatype do tipo Varchar ou
então utilizar o datatype BigInt.
O datatype BigInt consiste em um tipo de dados utilizado para armazenar valores numéricos,
com a capacidade de armazenamento de uma faixa de valores superior a suportada para
datatype Int, a única desvantagem em relação ao Int e vinculada com o tamanho de espaço
ocupado pelo BigInt que neste caso representa 8 bytes, sendo que, o Int ocupado no máximo 4
bytes.
Por outro lado utilizar o datatype Varchar com o tamanho de 14 posições poderá facilitar o
armazenamento destes dados, mas é claro somente os números, por outro estaremos
proporcionando e até mesmo forçando uma possível alocação de dados um pouco maior que o
BigInt.
Outra consideração que devemos levar em conta, é que se for necessário realizar uma
pesquisa sobre estes dados armazenados no Varchar, o SQL Server normalmente apresenta
uma certa perda de performance na busca de dados armazenados em campos do tipo Char,
VarChar, Nchar ou Nvarchar.
Desta forma, decidi criar um pequeno laboratório para testes e tentarmos evidenciar o que
seria melhor para uma pequena porção de dados armazenados em duas tabelas muito
similares.
Veja abaixo código de exemplo:
--Criando a Table para armazenar o CNPJ em VarChar-Create Table TB_VarChar_CNPJ
(Codigo Int Identity(1,1),
CNPJ Varchar(14) Not Null)
--Criando a Table para armazenar o CNPJ em BigInt-Create Table TB_BigInt_CNPJ
(Codigo Int Identity(1,1),
CNPJ BigInt Not Null)
--Inserindo os dados-Insert Into TB_VarChar_CNPJ Values('1234567891234')
Go 10
Insert Into TB_BigInt_CNPJ Values(1234567891234)
Go 10
--Verificando os dados armazenados em ambas as tables-Select * from TB_VarChar_CNPJ
Select * from TB_BigInt_CNPJ
Vamos começar a análise através de uma verificação do espaço ocupado pelos dados
inseridos em nossas tabelas.
-- Verificando o espaço ocupado por cada table -sp_spaceused 'TB_VarChar_CNPJ'
sp_spaceused 'TB_BigInt_CNPJ'
Após realizar esta primeira análise o podemos identificar que não ocorreu nenhuma variação
de espaço ocupado em cada table, mesmo utilizando tipos de dados diferentes.
Agora vamos utilizar outra técnica para nossa comparação através do comando DBCC
ShowContig.
-- Obtendo informações estatísticas sobre a Table TB_VarChar_CNPJ -Através do comando DBCC ShowContig, temos a possibilidade de obter informações sobre as
estatísticas de dados armazenados em uma tabela, seu área de dados armazenados por
página, quantidade de espaço livre por página, entre muitas outras informações que podem
fazer a diferença no momento de definir qual datatype poderá ser melhor.
Dbcc ShowContig ("TB_VarChar_CNPJ")
Observando o resultado da tabela TB_VarChar_CNPJ, podemos verificar que os dados
armazenados no datatype Varchar estão ocupando 3.68% da densidade de dados alocados por
página e a média de espaço livre por página é de 7796.0%.
O próximo passo é executar o mesmo comando para a tabela TB_BigInt_CNPJ,
conforme apresenta o código abaixo e demonstrado na Figura 5.
--Obtendo informações estatísticas sobre a Table TB_BigInt_CNPJ-Dbcc ShowContig ("TB_BigInt_CNPJ")
Por outro lado o resultado da tabela TB_BigInt_CNPJ mostrou uma diferença interessante de
dados armazenados no datatype BigInt, ocupando 2.57% da densidade de dados alocados por
página e a média de espaço livre de aproximadamente 7886.0%
Com isso podemos dizer, que esta pequena quantidade de registros armazenados por cada
table o datatype BigInt esta ocupando uma quantidade menor de espaço em nossa página de
dados para cada registro. Mas se analisarmos toda a capacidade de armazenamento da página
de dados, o BigInt esta alocando menos dados por cada linha de registros do que o
Varchar(14).
Essa análise nos indica que com o passar do tempo o datatype Varchar irá ocupar um pouco
mais de espaço em cada página de dados que esta formando cada tabela, como também ira
proporcionar uma alocação de mais registros por linha em cada página de dados um pouco
maior que o BigInt.
Sendo assim, vale a pena perder um pouco de espaço no armazenamento de dados utilizando
o Varchar com uma quantidade pequena, com o passar do tempo e o aumento de registros
armazenados por página.
Você poderá ser beneficiado com a capacidade de alocar mais dados por cada linha de
registro, diminuindo de foma considerável algum tipo de fragmentação de dados e
possibilitando uma melhor ocupação da área de armazenaento de dados existente em cada
página.
Importante destacar que em nenhum momento esta análise tem por objetivo forçar o leitor a
escolher o que supostamente foi apresentado com o resultados. Mas sim demonstrar algumas
atividades que devemos realizar antes de escolher um tipo de dados que aparentemente é
melhor.
Download