2011-01-12 14 views
15

NUMERIC/DECIMAL精度のSQL Server 2008 R2ストレージに関するMSDNの状態を考慮してください。 1〜9のSQL Server NUMERIC/DECIMALの精度と記憶域

精度は9バイト

である10〜19の5バイト
精密であるので、私のビジネスケースは、論理的に小数点以下2桁を持つデータ型と5桁の精度を必要とする場合NUMERIC(5,2)またはNUMERIC(9,2)と定義すると、実際のパフォーマンスやストレージの違いはありません。

実際の許容範囲を制限するカラムに実際のチェック制約を置く可能性が高いため、私は意図的に無視しています。

これは、インデックス、クエリのパフォーマンス、またはシステムの他の側面については、違いがありますか?

+0

NUMERICでは、挿入/更新された値に小数点以下の桁が存在することを保証していません。 –

+0

sum()を使用してオーバーフローをテストします。 –

答えて

37

数値(5,2)は、999.99以下の数値を許可します。 1000.0を挿入しようとすると、算術オーバーフローが発生します。

数値(9,2)は、「そうでなければ、オーバーフローまたはあなたを得るでしょう、あなたは、この値を合計することを計画している場合、余分なスペースが許可されていることを数字までと9 999 999.99

ベアなどの心の中で可能に明示的なキャストを行う必要があります。

これらは同じバイト数を消費します。それらは同じストレージサイズであるため、データページ、メモリ、インデックス、ネットワーク伝送などで同じです。

これは私が通常必要とするサイズの数値ストア(数値を使用する場合)、次にストレージのサイズが大きくなるポイントのすぐ下になるように精度を上げます(縮尺を変えます)。 小数点以下4桁で最大9900万を格納する必要がある場合は、数値(12,4)になります。同じストレージについては、ビジネスユーザーが実際に数十億をそこに格納する必要があると発表したときに数値(19,6)を使用して安全なスペースを与えることができます。

関連する問題