在SQL Server 2012中,我需要从具有4-5个索引的表中删除100+百万行。
我该如何进行?我猜交易记录将满,因此取消交易。
感谢您的帮助
答案 0 :(得分:3)
根据表的大小,您可能会发现清空和重新填充它的速度更快:
create table temp_t
select *
from t
where <i want to keep conditions>;
truncate table t;
insert into t
select *
from temp_t;
从长远来看,您可能希望添加分区,以便更轻松地删除行。例如,按日期分区可以使您以最小的开销删除旧记录。
答案 1 :(得分:0)
如果您
足以进行分块删除。可以在SO和dba.SE上的各种相关问题中找到很多示例(例如this one或that one)。为了使这个答案自成一体,我在这里引用其中一个示例(取自this answer by gbn,并稍加修改):
SELECT 'Starting' --sets @@ROWCOUNT
WHILE @@ROWCOUNT <> 0
DELETE TOP (10000) MyTable WHERE <some condition>