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 server 需要读取每条记录并将其再次写入 HDD 的事实。由于计算本身非常便宜,因此您可以在costs任何需要的地方使用计算字段。

于 2012-08-18T13:15:14.650 回答