SQL Math更新性能优化

时间:2012-08-18 11:48:32

标签: sql sql-server performance sql-server-2008 math

我正在运行超过70 Mio的简单更新。记录(MS-SQL Server 2008)

UPDATE T1 SET COSTS=AMOUNT*0.003

最多需要8个小时。

是否有一种简单的“廉价”方式来提高此类更新的数学性能?

由于没有WHERE子句或比较,只需将每个记录与值相乘,创建一个INDEX就没有效果......或者?

非常感谢你的时间。

3 个答案:

答案 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作为计算字段随时随地使用。