0

遇到一个问题,我有一个复杂的 sql 查询,偶尔挂起并且不在 MS SQL 上执行。但是,当我对查询中涉及的表运行更新统计信息时,查询会正常执行。

关于原因的任何想法或指示?

谢谢!

4

1 回答 1

0

SQL Server 创建一个“执行计划”,它使用统计信息来确定过滤数据/减少对数据库表的访问的最佳顺序。

这个执行计划存储在数据库缓存中,只要数据库在线就可以重复使用;不会重建统计信息,也不会修改查询。

更新索引时,也会更新统计信息。

因此,为您的查询存储的执行计划不再是最佳的,因此将不再使用。

我希望 SQL Server 在重建索引之前也会关闭表的未使用锁和事务。这是一个未记录的功能。

于 2012-11-22T21:54:27.013 回答