顧客の1人がDECIMAL(18,0)
、SQL Server 2008R2データベースのデータ型を一部の列に使用しています。列の成長が非常に遅いため、彼は最近、データ型を変更してDECIMAL(5,0)
ストレージを回復することを提案しました。
MSDNライブラリによると、DECIMAL(5,0)
データ型の記憶領域は、データ型と同様DECIMAL(9,0)
に5バイトです。INT
1バイト小さくなりますが、格納できる-99,999〜99,999の代わりに-2 ^ 31〜2 ^ 31の範囲ですべてをDECIMAL(5,0)
格納できます。DECIMAL
5バイト(DECIMAL(9,0)
)に収まる最大サイズでも、-999,999,999から999,999,999の範囲の整数のみを格納できます(INT
4バイトで提供される範囲の半分未満です)。
DECIMAL
over を使用することの2つの「メリット」を考えることができますINT
。
- 後でストレージ容量を使用せずにスケールを追加する機能
- データ型を変更せずに、38桁まで精度をスケーリングする機能
しかし、これらは私の意見では本当の利点ではありません:
- 整数へのスケールの追加は、ごくわずかな場合にのみ意味があります(スケールが違いを生むほとんどの場合、事前に追加することもできます)
- SQL Serverは、すべての精度/スケールの組み合わせを異なるデータ型と見なします。そのため、精度またはスケールを増やしても、データ型はそのままではありません。
これは私に疑問を抱かせます:DECIMAL(5,0)
整数のデータ型の追加の利点は何ですか?
decimal(x,0)
と整数型とのもう1つの違いは、算術除算で示されます。intをintで除算すると、intが得られます。decimal(x、0)をintで除算すると、decimal(x + 6,6)が得られます。