删除SQL会锁定阻止新数据插入SQL Server 2005的表吗?

dsu*_*sum 6 sql sql-server-2005

如果我尝试从表中删除数据的早午餐.说

DELETE FROM myTable Where CreationDate < GetDate()
Run Code Online (Sandbox Code Playgroud)

这需要几个小时才能被删除,这个表会被锁定并且不会发生新的插入吗?

此表不会自我引用.我想我仍然可以在删除时插入新数据.删除sql是否会使用独占锁来阻止对表的所有访问?

谢谢

小智 9

您可以批量处理它们以防止它锁定整个表:

WHILE 1 = 1
  BEGIN
        DELETE  TOP 10000 FROM  myTable WHERE CreationDate < GetDate()

        IF @@ROWCOUNT = 0
            BREAK
  END
Run Code Online (Sandbox Code Playgroud)

  • 升级所需的锁数不是严格的5K.还有其他几个因素.以下为SQL 2005解释它做了不错的工作:http://blogs.msdn.com/b/sqlserverstorageengine/archive/2006/05/17/lock-escalation.aspx (4认同)
  • 关键是在CreationDate上有一个索引.无需每批次进行表扫描. (3认同)
  • 10K 行将升级为表锁。将其保持在 5K 以下以防止出现这种情况。 (2认同)