SQL 查询突然需要很长时间才能运行

SQL 查询突然需要很长时间才能运行

我有一个应用程序正在处理来自 SQL 数据库的大量项目。它运行良好,但在处理了大约 400 万个项目后,它开始挂起。

使用 SQL Server Profiler,我将问题追溯到持续时间从大约 1,000 跳转到持续时间 2,000,000 的查询。

该查询的简化版本如下所示:

select t.field1, t.field2 
from table1 t 
where t.id in (select top 1000 t2.id from table2 t2 where t2.id > XXXX order by t2.id)

知道为什么执行起来会突然花费这么长时间吗?

答案1

这是过时统计数据的一个典型例子——一个查询运行良好,然后,没有任何明显的原因,变得非常慢。

当数据库正在使用并且发生许多事务时,SQL Server 统计数据会变得不准确。

问题排查从分析慢查询开始。如果查询执行计划中的预估行数和实际行数之间的差异高于 10%,则统计信息已过时。性能将受到何种影响取决于查询和执行计划。相同的过时统计信息对两个不同的查询可能产生不同的影响。

没有动态管理视图可以指示不准确的统计数据,有时更新统计数据并查看是否有帮助比逐步分析情况更容易。

您可以在这里找到有关统计数据的更多信息:统计数据

答案2

需要做的就是更新统计信息

相关内容