Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

numeric(38,0) como coluna de chave primária; bom, ruim, quem se importa?


Bem, você é gastar mais dados para armazenar números que você nunca alcançará.

bigint sobe para 9.223.372.036.854.775.807 em 8 Bytes

int sobe para 2.147.483.647 em 4 bytes

Um NUMERIC(38,0) vai levar, se eu estiver fazendo as contas corretamente, 17 bytes.

Não é uma grande diferença, mas:tipos de dados menores =mais linhas na memória (ou menos páginas para o mesmo número de linhas) =​​menos E/S de disco para fazer pesquisas (pesquisas de páginas indexadas ou de dados). Acontece o mesmo para replicação, páginas de log, etc.

Para SQL Server:INT é um padrão IEEE e, portanto, é mais fácil para a CPU comparar, portanto, você obtém um pequeno aumento de desempenho usando INT vs. NUMERIC (que é um formato decimal compactado). (Observe no Oracle, se a versão atual corresponder às versões mais antigas em que cresci, TODOS os tipos de dados são compactados, portanto, um INT dentro é praticamente a mesma coisa que um NUMERIC( x,0 ) para que não haja diferença de desempenho)

Então, no grande esquema das coisas - se você tiver muito disco, RAM e E/S sobressalentes, use qualquer tipo de dados que desejar. Se você quiser obter um pouco mais de desempenho, seja um pouco mais conservador.

Caso contrário, neste momento, eu deixaria como está. Não há necessidade de mudar as coisas.