2017-01-13 16 views
0

SQL Server上で実行される大規模なSQLデータベースがあります。大量のデータに対して算術演算を実行する必要があり、パフォーマンスを向上させることを検討しています。私は現在、FLOATデータ型を使用して金額を保管しています。数値データ型について読んで、別のデータ型が速度を向上させるかどうかを確認しています。算術演算で最も効率的なデータ型

可能であればDECIMAL()を使用することをお勧めするthis questionを読んでいます。小数点以下6桁が必要なので、DECIMAL(18,6)を実装しました。しかし、私はクエリ速度の小さな低下に気づいた。

浮動小数点数の代わりに使用できる高速データ型はありますか? DBの算術演算をどのように改善できますか?

+0

私はSQL Serverを使用しています。 – lisovaccaro

+1

浮動小数点は近似のデータ型であり、すべての値が正確に動作するわけではないので、浮動小数点精度はおそらく適切ではありません。小数点(18,6)はかなり大きな小数です。あなたは本当にそれが大規模に必要ですか?これにより12桁の有効数字が得られます。また、データ型は他のデータ型より速くも遅くもありません。それに関連する速度はありません。パフォーマンスの違いをもたらすのは、クエリ、テーブル構造、およびインデックス作成です。クエリ、テーブル構造、およびインデックスを共有できますか? –

+0

'decimal(9,6)'を使うことができれば、記憶容量の大きさを9バイトから5バイトに落とします。 – SqlZim

答えて

0

小さいデータ型(例:decimal(9,6))を使用することができれば、説明したように大量のデータに対してスピードが向上することがあります。

実行している操作の種類によっては、結果のデータ型のサイズが大きくなることがあります。

decimal(18,6)(9バイト)を2つ乗算すると、結果のデータ型はdecimal(37,16)(17バイト)になります。

decimal(9,6)(5バイト)を2つ乗算すると、結果のデータ型はdecimal(19,12)(9バイト)になります。

はフルチャートと説明については、MSDNのこの記事を参照してください。Precision, Scale, and Length (Transact-SQL)

Operations and resulting precision and scale