优化删除大量行(超过几百万) - SQL Server 2005

时间:2010-07-31 12:10:29

标签: sql

首先我们从ProductFileLocalName获取最大ID,然后 - 1000(因为我们不想删除最新添加的内容,因为它们可能尚未插入到ProductFileInfo中)

然后我们将max id传递给这个存储过程:

DELETE TOP (10000)
FROM ProductFileLocalName WITH (ROWLOCK)
FROM ProductFileLocalName
    LEFT OUTER JOIN ProductFileInfo AS pfi WITH (NOLOCK) ON ProductFileLocalName.ProductFileLocalNameId = pfi.ProductFileLocalNameId
WHERE (ProductFileLocalName.ProductFileLocalNameId < @maxid AND pfi.ProductFileInfoId IS NULL);

这是执行此操作的最有效方法吗?

1 个答案:

答案 0 :(得分:0)

如果你真的只保留了百万分之一,你有没有选择将你想保留的东西复制到双表(相同的场景),然后核大一个并复制那个小子集?您需要测量此选项的时间,并检查您可以承受的连续延迟时间。

另一种选择是找出一个可以作为分区列的列 - 假设这些百万条记录在更长的时间内进入,你可能会建立安全的时间限制并且总是在旧的分区(或分区)之后甚至先将它们分开。

正如其他人提到的,如果你想让人们思考更具体的场景而不是猜测,你需要在问题中加入更具体的信息 - 对于所有大删除都没有一个单一的策略。