Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server BIGINT oder DECIMAL(18,0) für Primärschlüssel

Diesen Bereich erhalten Sie mit bigint:

-2^63 to 2^63-1 

also known as roughly:

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

Sie erhalten diesen Bereich mit decimal(18,0) :

-10^18 to 10^18

Dezimal:Speicherbytes pro Genauigkeit

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

Integer-Typen und Speicherbytes

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

Gedanken

Die beiden in Ihrer Frage geposteten Beispiele ergeben tatsächlich praktisch die gleiche Menge an eindeutigen Werten.

Außerdem werden Sie unabhängig von Ihrer Wahl keine signifikante Leistungsänderung feststellen, aber Sie werden eine Änderung der Effizienz für andere Programmierer im Team feststellen, wenn Sie anfangen, Dezimalzahlen zu verwenden, wo Programmierer eine ganze Zahl erwarten. Dies ist ein kleiner Punkt.

Um Ihr spezielles Problem zu lösen, verwenden Sie Decimal(38,0), wenn Sie einen größeren Bereich wünschen. Das ergibt:

-10^38 to 10^38

Wenn Sie sich Sorgen um die Geschwindigkeit machen, verwenden Sie die minimale Genauigkeit, die die Lebensdauer Ihrer Software überdauert.

Wenn Sie die Zeit nicht in Nanosekunden messen, wählen Sie die Option, die am besten zu den Denkweisen Ihrer Programmierer und Ihrem Wunsch nach sehr langen Zahlen passt.

Referenzen