我正在运行超过70 Mio的简单更新。记录(MS-SQL Server 2008)
UPDATE T1 SET COSTS=AMOUNT*0.003
最多需要8个小时。
是否有一种简单的“廉价”方式来提高此类更新的数学性能?
由于没有WHERE子句或比较,只需将每个记录与值相乘,创建一个INDEX就没有效果......或者?
非常感谢你的时间。
答案 0 :(得分:3)
编写70 Mio行确实需要时间。添加索引会使事情变得更糟,因为索引必须与表一起更新。
此更新真的有必要吗?你不能用视图或计算列或其他什么来解决任务吗?
答案 1 :(得分: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;
这可能是一种快速而肮脏的方式来做你需要的事情。
答案 2 :(得分:0)
您的问题不是数学(计算该值),而是sql server需要读取每条记录并再次将其写入HDD。由于计算本身非常便宜,因此您可以将costs
作为计算字段随时随地使用。