Un de nos clients utilise pour certaines colonnes le type DECIMAL(18,0)
de données dans sa base de données SQL Server 2008R2. Parce que les colonnes croissent assez lentement, il a récemment proposé de changer le type de données DECIMAL(5,0)
pour retrouver un peu de stockage.
Selon la bibliothèque MSDN , l'espace de stockage du DECIMAL(5,0)
type de données est, tout comme le DECIMAL(9,0)
type de données, de 5 octets. INT
est 1 octet plus petit, mais peut tout stocker dans la plage de -2 ^ 31 à 2 ^ 31 au lieu des -99 999 à 99 999 qui DECIMAL(5,0)
peuvent le stocker. Même le plus grand DECIMAL
qui tient en 5 octets ( DECIMAL(9,0)
) ne peut stocker que des entiers compris entre -999 999 999 et 999 999 999 (ce qui représente moins de la moitié de la plage INT
proposée en 4 octets).
Je peux penser à deux «avantages» de l'utilisation de DECIMAL
plus INT
:
- La possibilité d'ajouter de l'échelle par la suite, sans utiliser plus d'espace de stockage
- La possibilité de mettre à l'échelle la précision jusqu'à 38 chiffres, sans modifier le type de données
mais ce ne sont pas de vrais avantages à mon avis:
- L'ajout d'échelle à des entiers n'a de sens que dans très peu de cas (dans la plupart des cas où l'échelle fait une différence, elle pourrait également être ajoutée au préalable)
- SQL Server voit chaque combinaison précision / échelle comme un type de données différent, donc le type de données n'est pas laissé seul lors de l'augmentation de la précision ou de l'échelle.
Cela me fait me demander: quel est l'avantage supplémentaire d'un DECIMAL(5,0)
type de données pour les entiers?
decimal(x,0)
et un type entier se manifeste dans la division arithmétique. Si vous divisez un int par un int, vous obtenez un int. Si vous divisez une décimale (x, 0) par un entier, vous obtenez une décimale (x + 6,6).