Muitos de nossos bancos de dados armazenam códigos de rastreamento numéricos (como números de série) como números inteiros. Há pouca chance de esses códigos obterem caracteres alfabéticos, mas ainda parece um tipo de dados incorreto, pois você nunca executaria operações matemáticas neles.
Qual é o tipo de dados apropriado para esses tipos de identificadores?
Uma das maiores vantagens de usar um
INT
over say aCHAR
orVARCHAR(10)
é o tamanho. OINT
valor será de 4 bytes e oCHAR/VARCHAR
valor será de 10 bytes.NCHAR/NVARCHAR
seria ainda maior em 20 bytes. Por causa disso, os índices deINT
valores são menores e, portanto, mais rápidos, às vezes consideravelmente, do que umCHAR/VARCHAR
índice correspondente. Além disso, seus tamanhos de linha são menores, exigindo menos leituras por linha. Isso tudo além do armazenamento de espaço real, é claro. Thomas LaRock escreveu vários blogs sobre"right sizing"
seus tipos de dados. Este tipo de dados faz minha coluna parecer gorda e como: dimensionar corretamente os tipos de dados atualmente no buffer pool, por exemplo.Tudo isso, é claro, pressupõe que você de fato não usará caracteres em seus códigos de rastreamento. Se você for, é claro que não tem escolha a não ser usar
CHAR\VARCHAR
.Um dos problemas com int é: eles não podem começar com "0". Portanto, sempre que houver um risco de 0 inicial (código postal, pin, ...), não use int.