在SQL Server中批量更新

时间:2014-03-23 19:47:15

标签: sql-server

如果我在sql server中有数百万行要更新,那我该怎么办?是否存在批量更新的逻辑方法,否则它将长时间锁定表。

2 个答案:

答案 0 :(得分:0)

您可以将代码作为bulkadmin用户运行,这意味着触发器不会触发,如果您有触发器,将使插入表的时间更短。这样做的缺点是触发器不会触发,你可能需要触发它们或者编写代码来执行tirgger可能做的事情。

您可以批量运行更新(例如10,000),这样您就不会在一个事务中更新数百万行。确保每个批次都在自己的交易中。通常最好在非高峰时段执行此操作。

您可以确保编写代码,以便不会更新不需要更新的行。例如,您可能会看到如下更新语句:

Update table1
set somefield = 0

您可能需要的地方

Update table1
set somefield = 0
where somefield <> 0

更新一百万行与需要更新的35之间存在巨大的性能差异。

如果您的更新来自文件,请使用针对高性能进行优化的SSIS(如果您编写核心包。)

答案 1 :(得分:0)

面试官可能想要衡量你对lock granularity的了解。如果&#34;批量&#34;否则更新将锁定表,然后您可以更新表数据的较小子集,每个子​​集在一个单独的事务中,直到更新所有必需的行。较小的数据子集可以允许更新保持较小的锁定,例如extentpageRID锁定等。