sql >> Database >  >> RDS >> Sqlserver

SQL Server BIGINT of DECIMAL (18,0) voor primaire sleutel

Je krijgt dit bereik met bigint:

-2^63 to 2^63-1 

also known as roughly:

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

Je krijgt dit bereik met decimaal (18,0) :

-10^18 to 10^18

Decimaal:opslagbytes per precisie

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

Gehele typen en opslagbytes

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

Gedachten

De twee voorbeelden die in uw vraag zijn geplaatst, leveren feitelijk vrijwel dezelfde hoeveelheid unieke waarden op.

Ook zul je geen significante prestatieverandering zien, ongeacht je keuze, maar je zult een verandering in efficiëntie zien voor andere programmeurs in het team als je decimalen gaat gebruiken waar programmeurs een geheel getal verwachten. Dit is een klein punt.

Om uw specifieke probleem aan te pakken, als u een groter bereik wilt, gebruikt u Decimal(38,0). Dit geeft je:

-10^38 to 10^38

Als u zich zorgen maakt over snelheid, gebruik dan de minimale precisie die de levensduur van uw software meegaat.

Als je de tijd niet in nanoseconden meet, kies dan de optie die het beste past bij de mentaliteit van je programmeurs en je wens om een ​​zeer lange reeks getallen te hebben.

Referenties



  1. SQL-query met ON DUPLICATE KEY UPDATE verduidelijking nodig

  2. Hoe de sortering van een kolom in SQL Server (T-SQL) in te stellen

  3. Kan Azure Web App - NodeJS niet verbinden met Azure Mysql

  4. Wat is er met (nolock) in SQL Server?