有一个问题,我有一个复杂的SQL查询,偶尔挂起,不会在MS SQL上执行。但是,当我对查询中涉及的表运行update statistics时,查询会正常执行。
关于原因的任何想法或指示?
谢谢!
答案 0 :(得分:0)
SQL Server创建一个“执行计划”,该计划使用统计信息来确定筛选数据/减少对数据库表的访问的最佳顺序。
此执行计划存储在数据库缓存中,只要数据库处于联机状态,就会重新使用;不会重建统计信息,也不会修改查询。
更新索引时,统计信息也会更新。
因此,查询的存储执行计划不再是最佳的,因此将不再使用。
我希望SQL Server在重建索引之前还会关闭表的未使用的锁和事务。这是一个没有文档记录的功能。