2

70 Mio を超える単純な更新を実行しています。レコード (MS-SQL Server 2008)

UPDATE T1 SET COSTS=AMOUNT*0.003

最大8時間かかります。

このような更新の計算パフォーマンスを向上させる簡単な「安価な」方法はありますか?

また、WHERE 句や比較がないため、すべてのレコードに値を乗算するだけで、INDEX を作成しても効果はありません... それとも?

どうぞよろしくお願いいたします。

4

3 に答える 3

3

70 Mio 行の書き込みには時間がかかります。インデックスをテーブルと共に更新する必要があるため、インデックスを追加すると事態はさらに悪化します。

このアップデートは本当に必要ですか?ビューや計算列などでタスクを解決できませんか?

于 2012-08-18T12:06:57.083 に答える
1

上記のコメントに完全に同意します。問題は一致計算ではなく、データベース エンジンの I/O です。

計算列を提案したいだけです。同じ行の他の値から計算される「仮想」列をテーブルに追加できます。これは、更新を完全に省略できる可能性があることを意味します。テーブルを変更して列を追加するだけです。

alter table add costs_new as amount * 0.03.

現在の名前を保持するには、古い名前を変更する必要があります。

exec sp_rename 't1.costs', 'costs_old', 'column';
alter table add costs as amount*0.03;

これは、必要なことを行うには手っ取り早い方法かもしれません。

于 2012-08-18T15:04:50.153 に答える
0

あなたの問題は数学(その値の計算)ではなく、SQLサーバーがすべてのレコードを読み取ってHDDに再度書き込む必要があるという事実です。計算自体は非常に安価であるため、costs必要な場所に計算フィールドを配置するだけで済みます。

于 2012-08-18T13:15:14.650 に答える