删除1.3亿行

时间:2019-03-21 15:57:57

标签: sql sql-server

在SQL Server 2012中,我需要从具有4-5个索引的表中删除100+百万行。

我该如何进行?我猜交易记录将满,因此取消交易。

感谢您的帮助

2 个答案:

答案 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 onethat one)。为了使这个答案自成一体,我在这里引用其中一个示例(取自this answer by gbn,并稍加修改):

SELECT 'Starting' --sets @@ROWCOUNT
WHILE @@ROWCOUNT <> 0
    DELETE TOP (10000) MyTable WHERE <some condition>