SQL Server:统计更新是否会导致查询计划被刷新?他们应该吗?

Tao*_*Tao 5 sql-server stored-procedures statistics parameter

我发现每天运行的大而讨厌的数据提取查询需要更新统计信息,以避免根据不正确的行数估计制定可怕的查询计划(让我们不必担心我的统计信息是否应该自动更新)。

如标题中所述,我的问题是:如果在更新给定的统计数据集之前准备好查询计划,而在优化器做出的决定结果出来的时候,我是否应该担心不正确的查询计划仍然存在?是错的?

或者统计更新自动导致依赖查询计划被刷新?

如果计划仍然存在,是否有办法确定哪些计划取决于给定索引的统计数据?(我知道,我可以去挖掘 DMV 文档,只是希望有人已经有了答案)

gbn*_*gbn 8

答案接近您的“统计信息更新会自动导致相关查询计划被刷新”。他们不会“坚持”

  • 从缓存中刷新计划由内存压力决定。
  • 如果AUTO_UPDATE_STATISTICS打开,统计更新会导致计划重新编译。
  • 更新的统计信息仅意味着批处理计划中的单个语句需要基于最优性的重新编译,它不会刷新整个事情。

类比可能是关注点分离:stats 的东西做 stats,计划缓存小部件做计划缓存的东西。统计说“我变了”,这个状态的消费者决定采取什么行动:而不是这个状态的生成者。

请参阅MSDN 上的执行计划缓存和重用