我使用的是SQL Server2008 R2。我正在从一个表中删除大约5000条记录。当我使用相同的数据测试性能时,我发现删除要么需要1秒,要么需要31秒。
测试数据库是保密的,所以不能在这里共享。
我已经尝试分开加载,一次只删除1000条记录,但我仍然遇到了偏差。
我应该如何继续我的调查?性能差异的原因可能是什么?
查询很简单,类似于:delete from PART where INVOICE_ID = 64225
发布于 2015-11-30 13:12:09
DELETE子句使用了大量的系统和事务日志资源,这就是为什么它会花费很多时间的原因。如果可能,请尝试截断表。
发布于 2015-11-30 13:46:27
当您第一次运行删除时,可能数据不在缓冲池中,因此必须从存储中读取,第二次运行时将在存储中。其他因素包括检查点进程是否正在将已更改的页面运行到存储中。发布您的查询计划->
set statistics xml on
select * from sys.objects
set statistics xml off
发布于 2015-11-30 13:57:11
啊!在仔细查看执行计划后,我注意到缺少一个索引。添加索引后,所有执行都运行得很快。请注意,在此之后,我删除了索引,以测试问题是否再次出现。性能偏差再次出现。
https://stackoverflow.com/questions/33999201
复制