我有一个巨大的表(30 亿行),不幸的是其中大部分包含过期数据。我想简单地删除所有这些过期的行,并保留其余的。
我可以执行这样的语句:
delete from giganticTable where exp_date < getDate()
执行计划以某种方式估计将删除大约 4 亿行。
执行时,不仅一个小时后没有完成,而且数据库事务日志文件也从 6 GB 增长到 90 GB。请注意,发生这种情况时,数据库处于批量日志恢复模式。我最终取消了这个查询,因为我确信一定有更好的方法来做到这一点。
我有几个表需要执行类似的操作。如果我绝对不想恢复它们,那么删除这些行的最快和最节省空间的方法是什么?
请注意,我使用的是 Microsoft SQL Server 2005。