SQL中的Delete语句非常慢
我有这样的语句正在超时:
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
更新:我桌上没有触发器。
回答:
可能导致删除速度变慢的事情:
- 删除很多记录
- 许多索引
- 子表中的外键缺少索引。(感谢@CesarAlvaradoDiaz在评论中提及此内容)
- 死锁和阻塞
- 触发因素
- 级联删除(要删除的那十条父记录可能意味着要删除数百万条子记录)
- 交易日志需要增长
- 许多外键要检查
因此,您的选择是找出阻塞的原因并进行修复,或者在不影响正常生产负荷的情况下在非工作时间运行删除。您可以批量运行删除(如果您有触发器,级联删除或大量记录,则很有用)。您可以删除并重新创建索引(最好也可以在非工作时间进行)。
以上是 SQL中的Delete语句非常慢 的全部内容, 来源链接: utcz.com/qa/412628.html