MSSQL 大量删除

MSSQL 大量删除

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

非常感谢尼克

答案1

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

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

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

答案2

嗯,如果您使用的是 SQL Server 分区,比如基于日期列,那么您可能会切换出不再需要的分区。也许这是未来实施的一个考虑。

我认为您唯一的选择可能是以较小的批次删除数据,而不是一次性删除,以避免任何潜在的阻塞问题。

答案3

您可以删除表上的所有索引,从表中删除,然后重新创建索引。这可以加快速度,但这取决于未删除的记录的百分比。

答案4

另一个选项是将您想要的数据选入另一个表。您可以通过这种方式设置日期分区。

如果日期索引是聚集索引,则删除应该发生得更快,因为它们在磁盘上都很靠近。

相关内容