增量删除 - 它是如何有益的?

时间:2010-10-08 18:19:04

标签: sql-server performance sql-delete

如果我有一个包含大量数据的表...如果我执行增量删除而不是“一次删除”..有什么好处?

一次性删除

 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

我得到了帮助 Deleting data in a sql server table takes much time

4 个答案:

答案 0 :(得分:3)

取决于配置,我看到大型删除会炸毁事务日志并导致磁盘空间不足导致失败。

您还可以使用较小的批次来避免锁定升级。

答案 1 :(得分:1)

或者,您可以导出要保留的数据,截断表格并重新加载数据。这可能会更快。即使你想要50%的数据,它仍然可以更快 - 截断只是最小的记录。运行自己的基准

答案 2 :(得分:1)

不同之处在于回滚信息的大小。

SQL Server是事务性的,在提交删除之前,应该可以回滚事务。

采用以下示例:

  • 硬盘10 GB上的可用空间
  • 要删除的信息20 GB

当您开始删除时,事务日志将增长,直到磁盘已满,然后它将崩溃。

即使有足够的磁盘空间,也存在其他问题,数据库锁定或性能命中。如果从实时系统中删除数据,这可能是一个严重的问题。

答案 3 :(得分:1)

  

我是DB调整的新手.... :(

我也是......  但是我不需要理解技术复杂性(比如锁定升级等)来感受/猜测通过小块吃掉/咬西瓜的好处而不是整个一块放入我的嘴里