小编典典

SQL中的Delete语句非常慢

sql

我有这样的语句正在超时:

DELETE FROM [table] WHERE [COL] IN ( '1', '2', '6', '12', '24', '7', '3', '5')

我尝试一次像这样做一次:

DELETE FROM [table] WHERE [COL] IN ( '1' )

到目前为止,已经到了22分钟,而且还在继续。

该表中有260,000行,为四列。

有谁知道为什么会这么慢以及如何加快速度?我在[WOL]上确实有一个非唯一,非聚集的索引,我正在其中执行WHERE操作。我正在使用SQL Server
2008 R2

更新:我桌上没有触发器。


阅读 877

收藏
2021-03-17

共1个答案

小编典典

可能导致删除速度变慢的事情:

  • 删除很多记录
  • 许多索引
  • 子表中的外键缺少索引。(感谢@CesarAlvaradoDiaz在评论中提及此内容)
  • 死锁和阻塞
  • 触发因素
  • 级联删除(要删除的那十条父记录可能意味着要删除数百万条子记录)
  • 交易日志需要增长
  • 许多外键要检查

因此,您的选择是找出阻塞的原因并进行修复,或者在不影响正常生产负荷的情况下在非工作时间运行删除。您可以批量运行删除(如果您有触发器,级联删除或大量记录,则很有用)。您可以删除并重新创建索引(最好也可以在非工作时间进行)。

2021-03-17