4

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

一次性删除

 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

我从 删除 sql server 表中的数据中得到了帮助需要很长时间

4

4 回答 4

3

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

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

于 2010-10-08T18:24:22.253 回答
1

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

于 2010-10-08T19:42:35.793 回答
1

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

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

举个例子:

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

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

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

于 2010-10-08T19:52:48.143 回答
1

我是DB调优的菜鸟.....:(

我也是......
但我不需要了解技术复杂性(如锁升级等)来感受/猜测小块吃/咬西瓜的好处,而不是把它整块放进嘴里

于 2010-10-10T13:22:15.973 回答