Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

numeric(38,0) comme colonne de clé primaire ; bon, mauvais, qui s'en soucie?

Eh bien, vous êtes dépenser plus de données pour stocker des chiffres que vous n'atteindrez jamais vraiment.

bigint monte à 9 223 372 036 854 775 807 en 8 octets

int monte à 2 147 483 647 sur 4 octets

Un NUMERIC(38,0) va prendre, si je fais bien le calcul, 17 octets.

Pas une énorme différence, mais :des types de données plus petits =plus de lignes en mémoire (ou moins de pages pour le même nombre de lignes) =moins d'E/S disque pour effectuer des recherches (indexées ou recherche de page de données). Il en va de même pour la réplication, les pages de journal, etc.

Pour SQL Server :INT est une norme IEEE et est donc plus facile à comparer pour le CPU, vous obtenez donc une légère augmentation des performances en utilisant INT par rapport à NUMERIC (qui est un format décimal condensé). (Remarque dans Oracle, si la version actuelle correspond aux anciennes versions sur lesquelles j'ai grandi, TOUS les types de données sont compressés, donc un INT à l'intérieur est à peu près la même chose qu'un NUMERIC( x,0 ) donc il n'y a pas de différence de performances)

Donc, dans le grand schéma des choses - si vous avez beaucoup de disque, de RAM et d'E/S de rechange, utilisez le type de données que vous voulez. Si vous souhaitez obtenir un peu plus de performances, soyez un peu plus conservateur.

Sinon, à ce stade, je le laisserais tel quel. Pas besoin de changer les choses.