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

numeric(38,0) als Primärschlüsselspalte; gut, schlecht, wen interessiert das?

Nun, sind Sie mehr Daten ausgeben, um Nummern zu speichern, die Sie nie wirklich erreichen werden.

bigint steigt auf 9.223.372.036.854.775.807 in 8 Bytes

int steigt auf 2.147.483.647 in 4 Bytes

Ein NUMERIC(38,0) wird, wenn ich richtig rechne, 17 Bytes dauern.

Kein großer Unterschied, aber:kleinere Datentypen =mehr Zeilen im Speicher (oder weniger Seiten für die gleiche Anzahl von Zeilen) =weniger Festplatten-E/A für Suchen (entweder indiziert oder Datenseitensuchen). Gleiches gilt für Replikation, Protokollseiten usw.

Für SQL Server:INT ist ein IEEE-Standard und daher für die CPU einfacher zu vergleichen, sodass Sie durch die Verwendung von INT vs. NUMERIC (das ein gepacktes Dezimalformat ist) eine leichte Leistungssteigerung erzielen. (Beachten Sie, dass in Oracle, wenn die aktuelle Version mit den älteren Versionen übereinstimmt, mit denen ich aufgewachsen bin, ALLE Datentypen gepackt sind, sodass ein INT darin so ziemlich dasselbe ist wie ein NUMERIC( x,0 ), sodass es keinen Leistungsunterschied gibt)

Also, im Großen und Ganzen - wenn Sie viel Festplatte, RAM und freie I/O haben, verwenden Sie den gewünschten Datentyp. Wenn Sie etwas mehr Leistung erzielen möchten, seien Sie etwas konservativer.

Ansonsten würde ich es an dieser Stelle so lassen wie es ist. Keine Notwendigkeit, Dinge zu ändern.