70 Mio を超える単純な更新を実行しています。レコード (MS-SQL Server 2008)
UPDATE T1 SET COSTS=AMOUNT*0.003
最大8時間かかります。
このような更新の計算パフォーマンスを向上させる簡単な「安価な」方法はありますか?
また、WHERE 句や比較がないため、すべてのレコードに値を乗算するだけで、INDEX を作成しても効果はありません... それとも?
どうぞよろしくお願いいたします。
70 Mio を超える単純な更新を実行しています。レコード (MS-SQL Server 2008)
UPDATE T1 SET COSTS=AMOUNT*0.003
最大8時間かかります。
このような更新の計算パフォーマンスを向上させる簡単な「安価な」方法はありますか?
また、WHERE 句や比較がないため、すべてのレコードに値を乗算するだけで、INDEX を作成しても効果はありません... それとも?
どうぞよろしくお願いいたします。
70 Mio 行の書き込みには時間がかかります。インデックスをテーブルと共に更新する必要があるため、インデックスを追加すると事態はさらに悪化します。
このアップデートは本当に必要ですか?ビューや計算列などでタスクを解決できませんか?
上記のコメントに完全に同意します。問題は一致計算ではなく、データベース エンジンの 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;
これは、必要なことを行うには手っ取り早い方法かもしれません。
あなたの問題は数学(その値の計算)ではなく、SQLサーバーがすべてのレコードを読み取ってHDDに再度書き込む必要があるという事実です。計算自体は非常に安価であるため、costs
必要な場所に計算フィールドを配置するだけで済みます。