我有以下查询:
update largeTable
set largeTable_id ='NA';
如果我们谈论一个45米的记录表,我想知道执行这种更新的最佳做法是什么。我应该考虑级联更新吗?或者这是自动完成的吗?
我将以下查询作为示例在不同的批处理中执行更新,以避免出现tlog空间问题:
DECLARE @i INT=1
WHILE (@i <= 10)
BEGIN
UPDATE TOP(20000) largeTable
SET largeTable_id = 'NA'
SET @i = @i + 1
END
所以,这几乎就是这个想法,任何意见或建议都会受到赞赏。
提前致谢:)。
添加新想法:
--T-SQL using the ROWCOUNT setting to control update size
SET ROWCOUNT 1000
WHILE (1 = 1)
BEGIN
BEGIN TRANSACTION
UPDATE tableB
SET TableB_TableA_id = 'NA';
IF @@ROWCOUNT = 0
BEGIN
COMMIT TRANSACTION
BREAK
END
COMMIT TRANSACTION
END
SET ROWCOUNT 0
主要目标是以多个批次执行该更新,避免在tlog数据文件中出现问题,并执行级联更新而不会出现性能问题。
答案 0 :(得分:0)
DECLARE @AffectedRows INT, @BatchSize INT;
SET @BatchSize = 5000;
SET @AffectedRows = @BatchSize;
WHILE (@Rows = @BatchSize)
BEGIN
UPDATE TOP (@BatchSize) tableB
SET TableB_TableA_id='NA'
WHERE TableB_TableA_id <> 'NA';
SET @AffectedRows = @@ROWCOUNT;
END;