【发布时间】:2016-05-05 00:12:03
【问题描述】:
我想不出加快速度的方法。它正在执行表扫描,但我不得不这样做,因为我需要更新所有记录...
问题是这个表有数百万条记录......大约有 3000 万条。
这大约需要 50 分钟才能运行。有人对我如何改进有任何提示吗?
update A
set A.product_dollar_amt = round(A.product_dollar_amt, 2),
A.product_local_amt = round(A.product_local_amt, 2),
A.product_trans_amt = round(A.product_trans_amt, 2)
from dbo.table A
该表目前是一个堆(没有聚集索引),因为它没有在其他任何地方使用...不确定创建聚集索引是否会改善这里的任何事情。
【问题讨论】:
-
批量更新怎么样?
-
那会有什么不同呢?
-
您可以使用 sp_WhoIsActive 监控查询,看看是否有任何异常等待发生。您还可以将此结果加载到 different 表中,然后将其重命名(或将其移动到不同的模式。然后更改似乎是即时的,但您需要存储两个完整的表3000 万条记录。
-
添加索引只会减慢更新速度
-
我不禁想知道这是否是一次性查询。如果是这样,那么需要多长时间并不重要,只需通过一次即可。如果不是,我不禁想知道为什么需要多次运行...相反,验证输入(并将字段设置为仅接受您实际想要的内容 - 例如,删除执行要求此更新(如果允许)。
标签: sql sql-server performance