如何从MSSQL中删除数百万条记录中的多条记录



表中有9亿行。如何在每次删除行时,其中on条件超过1000天。

我使用下面的查询:

delete
FROM db.dbo.table
WHERE [DateIn] <= DATEADD(DAY, -1000, GETDATE());

它应该删除超过1000天,但每次删除都不像我期望的那样。

考虑先备份(总是备份)到另一个表,否则删除恢复非常昂贵。免责声明:我没有测试这些和这只是一个超级快速的帖子在这里。在对生产数据执行任何操作之前都要进行测试。

这应该可以解决问题,但您可以考虑使用更小的块大小。这在您的环境中可能运行良好,也可能不运行良好;

WHILE EXISTS (SELECT * FROM db.dbo.table WHERE [DateIn] <= DATEADD(DAY, -1000, CURRENT_TIMESTAMP))
BEGIN
BEGIN TRANSACTION
DELETE TOP (100000)
FROM db.dbo.table
WHERE [DateIn] <= DATEADD(DAY, -1000, CURRENT_TIMESTAMP)
COMMIT TRANSACTION
END

CTE示例(可能考虑更小的删除大小)这样做的优点是从最老的日期开始工作;

WHILE EXISTS (SELECT * FROM db.dbo.table WHERE [DateIn] <= DATEADD(DAY, -1000, CURRENT_TIMESTAMP))
BEGIN
BEGIN TRANSACTION
;WITH deleteCTE AS (
SELECT TOP (100000) *
FROM db.dbo.table
WHERE [DateIn] <= DATEADD(DAY, -1000, CURRENT_TIMESTAMP)
ORDER BY [DateIn] ASC)
DELETE FROM deleteCTE;
COMMIT TRANSACTION
END

考虑其他选择,比如创建一个包含一组ID的表,然后用某种"组指示符"删除。对于日期/组,并通过连接来完成;诸如此类。

相关内容

  • 没有找到相关文章

最新更新