MSSQL 大删除

use*_*946 7 sql-server sql-server-2005

我在 MSSQL 数据库中有一个表,其中包含超过 1 亿条记录,分布在大约 100 天的数据中。我需要根据其日期清除其中的一些数据,该日期是表中的一个索引字段。我曾尝试对单个日期执行 DELETE FROM,但执行时间很长,并且导致服务器性能下降。有没有更好的方法来删除如此大量的记录?其中一些数据仍然需要,所以很遗憾我不能使用截断。

非常感谢尼克

nab*_*ond 2

当我按照以下流程执行类似任务时,取得了最大的成功:

  1. 复制数据以保留到临时表中
  2. 截断原始表以清除所有数据
  3. 将临时表中的所有内容移回到原始表中

这样做的一个主要好处是,当您将数据放回原始表时,您的索引将被重建。

  • 我可以看到这是如何运作的,但对于我来说这听起来有点太冒险了。例如,我个人不太愿意在高吞吐量 OLTP 生产数据库上执行此操作,但这只是我个人的想法。 (3认同)