我正在更新一个表中超过 1 亿的行。为了减少被锁定(甚至是表锁定)的行数,我正在使用 while 循环和一次递增 10k 行的组合来处理更新。
我在 SQL Server 2012 上运行它。
DECLARE @i int = 0
DECLARE @last int = 10000000
WHILE @i <= @last
BEGIN
UPDATE mytbl (ROWLOCK)
SET foo = null
WHERE id BETWEEN @i AND @i + 10000
SET @i += 10000
WAITFOR DELAY '00:00:01'
END
代码中的 1 秒等待是否在提高性能、提交/刷新事务或释放事务锁方面有任何作用?
答案 0 :(得分:0)
RE:“为了减少被锁定(甚至是表锁定)的行数...”
总的来说,你有一个很好的方法。建议:
希望有帮助。我已经在表上完成了 50 到 100 个这样的操作,将它们变成了数十亿行。键(如上所述):永远不要锁定表并提交每次迭代以保持事务较小。小额交易是您的朋友,原因有很多。