如果我有一个包含大量数据的表...如果我执行增量删除而不是“一次删除”..有什么好处?
DELETE table_1
WHERE BID = @BID
AND CN = @CN
AND PD = @PD;
While (1=1)
Begin
DELETE TOP (100000) FROM table_1
WHERE BID = @BID
AND CN = @CN
AND PD = @PD;
If @@rowcount = 0 -- No row affected.
BREAK
ELSE
Continue
End
答案 0 :(得分:3)
取决于配置,我看到大型删除会炸毁事务日志并导致磁盘空间不足导致失败。
您还可以使用较小的批次来避免锁定升级。
答案 1 :(得分:1)
或者,您可以导出要保留的数据,截断表格并重新加载数据。这可能会更快。即使你想要50%的数据,它仍然可以更快 - 截断只是最小的记录。运行自己的基准
答案 2 :(得分:1)
不同之处在于回滚信息的大小。
SQL Server是事务性的,在提交删除之前,应该可以回滚事务。
采用以下示例:
当您开始删除时,事务日志将增长,直到磁盘已满,然后它将崩溃。
即使有足够的磁盘空间,也存在其他问题,数据库锁定或性能命中。如果从实时系统中删除数据,这可能是一个严重的问题。
答案 3 :(得分:1)
我是DB调整的新手.... :(
我也是...... 但是我不需要理解技术复杂性(比如锁定升级等)来感受/猜测通过小块吃掉/咬西瓜的好处而不是整个一块放入我的嘴里