我不得不删除大量的数据。由于关系,截断是不可能的。我不想因为视图而丢弃表格。我正在使用下面的代码,但是有没有更好的主意呢?
delete from table
WHILE 1=1
BEGIN
BEGIN TRAN
DELETE top (1000000) from table
IF @@rowcount < 1000000 BREAK
WAITFOR DELAY '00:00:00:010'
COMMIT
end
DELETE from table发布于 2010-09-02 23:11:48
截断表将是目前为止最好的。
如果你因为引用完整性而担心关系,那么我建议你分别更新那些通过外键引用它的表(例如,如果外键有ON DELETE SET NULL,那么UPDATE RefTbl SET Key = NULL WHERE Key IS NOT NULL,类似地,delete If cascade等等)。
或者,如果您不想这样做,可以使用ROWCOUNT将查询更改为更快一些:
--other code for loop
SET ROWCOUNT 1000000 --this limits the number of rows that will be processed
DELETE FROM Table1此外,我不确定为什么要在事务中执行此操作?它将创建一个巨大的事务日志,并严重影响您的性能...当您执行转储表内容之类的操作时,事务通常是不相关的(在您的情况下可能是相关的,但我只是说很少会发生这种情况)。如果你确实需要事务,那么至少把你的延迟移出它...
发布于 2010-09-02 22:50:44
你可以做得更简单一点:
delete table where id in (select top 1000000 id from table)https://stackoverflow.com/questions/3627866
复制相似问题