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

SQL Server BIGINT eller DECIMAL(18,0) for primærnøgle

Du får dette interval med bigint:

-2^63 to 2^63-1 

also known as roughly:

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

Du får dette interval med decimal(18,0) :

-10^18 to 10^18

Decimal:Lagerbytes pr. præcision

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

Heltalstyper og lagerbytes

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

Tanker

De to eksempler, der er postet i dit spørgsmål, giver faktisk stort set den samme mængde unikke værdier.

Du vil heller ikke se en væsentlig præstationsændring uanset dit valg, men du vil se en ændring i effektiviteten for andre programmører på holdet, hvis du begynder at bruge decimaler, hvor programmører forventer et heltal. Dette er et mindre punkt.

For at løse dit specifikke problem, hvis du ønsker et større område, skal du bruge Decimal(38,0). Dette giver dig:

-10^38 to 10^38

Hvis du er bekymret for hastigheden, så brug den mindste præcision, der holder hele din softwares levetid.

Hvis du ikke måler tid i nano-sekunder, så vælg den mulighed, der passer bedst til dine programmørers tankegang og dit ønske om at have et meget langt sæt tal.

Referencer



  1. Sammenkæd og grupper flere rækker i Oracle

  2. Sådan opretter du en primær nøgle i SQL Server (T-SQL eksempler)

  3. Sådan bruger du FIND_IN_SET ved hjælp af en liste over data

  4. Brug af IF EXISTS (SELECT ...) i en BEFORE INSERT trigger (Oracle)