Sql 从包含100万条记录的表中删除500条记录不会花这么长时间

Sql 从包含100万条记录的表中删除500条记录不会花这么长时间,sql,sql-server,sql-server-2008,sql-delete,Sql,Sql Server,Sql Server 2008,Sql Delete,我希望有人能帮助我。我有一个简单的sql语句 delete from sometable where tableidcolumn in (...) 我有500条记录要删除并重新创建。该表最近增长到超过100万条记录。问题是上面的陈述需要超过5分钟才能完成。我有一个主键和两个非聚集非唯一索引。我的delete语句正在使用主键 有人能帮我理解为什么这句话要花这么长时间,以及我如何加快它的速度吗?我首先要看两个方面,锁定和糟糕的计划 锁定-运行您的查询,并在其运行时查看是否被任何其他内容阻止从sy

我希望有人能帮助我。我有一个简单的sql语句

delete from sometable 
where tableidcolumn in (...)
我有500条记录要删除并重新创建。该表最近增长到超过100万条记录。问题是上面的陈述需要超过5分钟才能完成。我有一个主键和两个非聚集非唯一索引。我的delete语句正在使用主键


有人能帮我理解为什么这句话要花这么长时间,以及我如何加快它的速度吗?

我首先要看两个方面,锁定和糟糕的计划

锁定-运行您的查询,并在其运行时查看是否被任何其他内容阻止从sys.dm_exec_requests中选择*from blocking_session_id 0如果您看到任何内容阻止您的请求,我将首先查看:

如果没有锁定,那么获取insert的执行计划,它在做什么?它特别高吗

除此之外,你预计需要多长时间?是比这个长一点还是长很多?它是在显著增长后才变得如此缓慢,还是在很长一段时间内变得缓慢


I/O性能如何,您的平均读/写时间等是多少;DR:不要这样做,而要使用一个大的“in”子句:预加载并使用临时表

由于参数多,后端配置未知,即使按照今天的标准应该可以,并且在处理过程中无法猜测内存大小,您可能会从开始按堆栈、批处理或限制的顺序进行操作。也有可能击中一个目标


故障排除注释可能会引导您找到另一个答案。我的pivot是'in'子句,语句大小,所有这些链接都包括预加载临时表并将其用于查询。

可能是级联关系?或在删除触发器上?中的值在哪里。。。名单来自哪里?另一个查询还是硬编码?你能更新而不是删除/创建吗?选择它们需要多长时间?从…中tableidcolumn所在的某个表中选择1?是否尝试使用FORCESEEK?发布执行计划。各位,感谢您的评论。我正在复习,很快会跟进。