SQL中的删除语句非常慢[英] Delete statement in SQL is very slow

本文是小编为大家收集整理的关于SQL中的删除语句非常慢的处理方法,想解了SQL中的删除语句非常慢的问题怎么解决?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 行,四列.

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

更新:我的桌子上没有触发器.

推荐答案

可能导致删除缓慢的事情:

  • 删除大量记录
  • 许多索引
  • 子表中的外键索引缺失.(感谢@CesarAlvaradoDiaz 在评论中提到这一点)
  • 死锁和阻塞
  • 触发器
  • 级联删除(您要删除的那十条父记录可能意味着数百万条子记录被删除)
  • 需要增长的事务日志
  • 要检查的许多外键

因此,您的选择是找出阻塞并修复它,或者在不干扰正常生产负载的非工作时间运行删除.您可以批量运行删除(如果您有触发器、级联删除或大量记录,则很有用).您可以删除并重新创建索引(最好在下班时间也可以这样做).

本文地址:https://www.itbaoku.cn/post/1793976.html