从大型表中删除记录的最有效方法

时间:2019-07-30 19:49:51

标签: sql sql-server

我有一个表tblcalldatastore,每天可产生约4000000条记录。我想创建一个日常作业,以删除24小时以上的所有记录顺序。什么是最有效,最省时的方法?下面的查询是我的要求。

 delete from [tblcalldatastore] 
 where  istestcase=0      
 and datediff(hour,receiveddate,GETDATE())>24

2 个答案:

答案 0 :(得分:2)

更好的方法是通过使用表上的分区来完全避免delete。删除分区而不是删除记录。

例如,您可以每小时创建一个分区。然后,您可以在过去的25小时内删除整个分区。或者,您基本上可以每天设置两个分区,然后在24小时后删除较旧的分区。

此方法具有很大的性能优势,因为未在记录级别记录分区删除,从而节省了大量时间。它们也不会调用触发器或其他检查,从而节省了更多精力。

有关分区的文档为here

答案 1 :(得分:-1)

您可能不想沿着“分区”路线走。

您通常每天通常会删除表中大约一半的数据。

删除非常昂贵... 一种更快的方法是

选择“插入新表”(要保留的数据)

重命名(或删除)您的旧表

然后将新表重命名为旧表名。

这应该可以更快地解决-除非您有大量的索引和FK ...