首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么批量删除记录比批量删除更好?

为什么批量删除记录比批量删除更好?
EN

Stack Overflow用户
提问于 2013-10-16 14:36:13
回答 1查看 3.7K关注 0票数 4

像这样的事情有什么原因

代码语言:javascript
复制
DECLARE @i int = 0
WHILE @i < 100 BEGIN
  BEGIN TRAN
    SET @i = @i + 1

    DELETE TOP (20) st
    FROM SomeTable st
    JOIN #ToDelete ON #ToDelete.Id = st.Id
  COMMIT
END

应该用来代替这样的东西吗?

代码语言:javascript
复制
DELETE st
FROM SomeTable st
JOIN #ToDelete ON #ToDelete.Id = st.Id
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-16 14:41:32

当您删除大量记录时,可能会发生几件事。

首先,您可能启用了级联删除,在这种情况下,在考虑所有子表时,从主表中删除10000条记录可能导致删除数百万条记录。即使没有级联的delte,如果有很多子表,则必须检查它们,以确保在删除之前没有记录。

此外,像这样的delete可能会使表上的锁定升级,这样在执行delete时,其他任何人都不能使用该表。当使用级联删除时,这甚至是一个更大的问题,因为这个过程将花费更长的时间,更多的表可能会被锁定。

另一件可能导致大型删除速度特别慢的事情是,如果表上有触发器,特别是其中有某种循环的触发器。

通常,当对大量记录的删除会花费太长时间并同时导致阻塞时,就会使用这种技术。您按批进行,因为这通常比一次一行的速度更快。

这不是每次删除一批记录时都需要使用的技术,如果删除在没有子记录和/或触发器的表中花费几秒钟时间,则没有必要。如果表不是其他人通常会与delete同时访问的表(例如在下班时间执行删除操作的作业),则不需要使用该技术。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19406303

复制
相关文章

相似问题

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