计划缓存中存储了哪个执行计划?

var*_*ble 7 sql-server execution-plan plan-cache sql-server-2019

当执行查询时,SQL Server将产生一个查询计划列表,并启发式地选择成本较低的计划。

所选择的计划将存储在计划缓存中,以供后续看到相同查询时使用。

当表的某些属性发生变化或者重建索引时,它会再次产生一个查询计划列表,并启发式地选择一个成本较低的查询计划,并将其存储在计划缓存中。

但是,MSDN 似乎表明估计计划存储在计划缓存中,请参见下面的屏幕截图。那是对的吗?

在此输入图像描述

Pau*_*ite 14

是的,这是正确的,尽管所使用的术语并不完美。

术语“估计”“实际”是区分没有运行时统计信息的计划(“估计”)和还包括来自特定执行的统计信息的计划(“实际”)的便捷方法。

缓存的计划不包括任何特定执行的运行时统计信息,因此它是“估计的”

查询存储还保存“估计”计划,但也单独记录一些运行时信息。


MBu*_*chi 6

仅供参考,我想将其添加到伟大的保罗的答案中。

这是关于执行计划的微软文档:

https://learn.microsoft.com/en-us/sql/relational-databases/performance/execution-plans?view=sql-server-ver16

正如你所看到的,它是这样说的:

  • 估计执行计划是编译后的计划,由查询优化器根据估计生成。这是存储在计划缓存中的查询计划
  • 实际执行计划是编译的计划及其执行上下文。它在查询执行完成后变得可用。这包括实际的运行时信息,例如执行警告,或者在较新版本的数据库引擎中,包括执行期间已用时间和使用的 CPU 时间。
  • 实时查询统计信息是已编译的计划及其执行上下文。它可用于正在进行的查询执行,并每秒更新一次。这包括运行时信息,例如流经运算符的实际行数、经过的时间和估计的查询进度。

在查询存储中,您还可以找到估计的执行计划和查询统计信息。