首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除大量数据

删除大量数据
EN

Stack Overflow用户
提问于 2010-09-02 22:04:05
回答 2查看 717关注 0票数 2

我不得不删除大量的数据。由于关系,截断是不可能的。我不想因为视图而丢弃表格。我正在使用下面的代码,但是有没有更好的主意呢?

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-02 23:11:48

截断表将是目前为止最好的。

如果你因为引用完整性而担心关系,那么我建议你分别更新那些通过外键引用它的表(例如,如果外键有ON DELETE SET NULL,那么UPDATE RefTbl SET Key = NULL WHERE Key IS NOT NULL,类似地,delete If cascade等等)。

或者,如果您不想这样做,可以使用ROWCOUNT将查询更改为更快一些:

代码语言:javascript
复制
--other code for loop
SET ROWCOUNT 1000000 --this limits the number of rows that will be processed
DELETE FROM Table1

此外,我不确定为什么要在事务中执行此操作?它将创建一个巨大的事务日志,并严重影响您的性能...当您执行转储表内容之类的操作时,事务通常是不相关的(在您的情况下可能是相关的,但我只是说很少会发生这种情况)。如果你确实需要事务,那么至少把你的延迟移出它...

票数 4
EN

Stack Overflow用户

发布于 2010-09-02 22:50:44

你可以做得更简单一点:

代码语言:javascript
复制
delete table where id in (select top 1000000 id from table)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3627866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档