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

SQL Server BIGINT ou DECIMAL(18,0) para chave primária


Você obtém esse intervalo com bigint:
-2^63 to 2^63-1 

also known as roughly:

-9.2 x 10^18 to 9.2 x 10^18

Você obtém esse intervalo com decimal(18,0) :
-10^18 to 10^18

Decimal:bytes de armazenamento por precisão
Precision    Storage Bytes
1-9:         5
10-19:       9
20-28:       13
29-38:       17

Tipos de inteiros e bytes de armazenamento
integer type    Storage Bytes
bigint          8
int             4
smallint        2
tinyint         1

Pensamentos

Os dois exemplos postados em sua pergunta realmente produzem praticamente a mesma quantidade de valores exclusivos.

Além disso, você não verá uma mudança significativa no desempenho, independentemente de sua escolha, mas verá uma mudança na eficiência de outros programadores da equipe se começar a usar decimais onde os programadores esperam um número inteiro. Este é um ponto menor.

Para resolver seu problema específico, se desejar um intervalo maior, use Decimal(38,0). Isso lhe dá:
-10^38 to 10^38

Se você estiver preocupado com a velocidade, use a precisão mínima que durará a vida útil do seu software.

Se você não estiver medindo o tempo em nanossegundos, escolha a opção que melhor se adapta à mentalidade de seus programadores e ao seu desejo de ter um conjunto muito longo de números.

Referências