Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server BIGINT o DECIMAL(18,0) per la chiave primaria

Ottieni questa gamma con bigint:

-2^63 to 2^63-1 

also known as roughly:

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

Ottieni questo intervallo con decimale(18,0) :

-10^18 to 10^18

Decimale:byte di archiviazione per precisione

Precision    Storage Bytes
1-9:         5
10-19:       9
20-28:       13
29-38:       17

Tipi interi e byte di archiviazione

integer type    Storage Bytes
bigint          8
int             4
smallint        2
tinyint         1

Pensieri

I due esempi pubblicati nella tua domanda in realtà producono praticamente la stessa quantità di valori univoci.

Inoltre, non vedrai un cambiamento significativo delle prestazioni, indipendentemente dalla tua scelta, ma vedrai un cambiamento nell'efficienza per gli altri programmatori del team se inizi a utilizzare i decimali in cui i programmatori si aspettano un numero intero. Questo è un punto minore.

Per risolvere il tuo problema specifico, se desideri un intervallo più ampio, usa Decimal(38,0). Questo ti dà:

-10^38 to 10^38

Se sei preoccupato per la velocità, usa la precisione minima che durerà per tutta la vita del tuo software.

Se non stai misurando il tempo in nanosecondi, scegli l'opzione che si adatta meglio alla mentalità dei tuoi programmatori e al tuo desiderio di avere una serie di numeri molto lunga.

Riferimenti