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