使用编译值时查询计划不同

Tom*_*Tom 1 sql-server execution-plan sql-server-2012

我从计划缓存中提取了一个执行计划,并从 XML 中提取了编译值。然后我使用编译后的值在 SSMS 中运行查询,即使查询计划针对同一个数据库运行,查询计划也不同。

任何人都可以解释为什么会发生这种情况吗?

Pau*_*ite 5

最有可能的是:

  1. 自从第一次编译缓存计划以来,数据库的状态(例如统计信息)发生了变化,导致重新编译;或者
  2. 您的 SSMS 连接使用的设置(例如ANSI_NULLS)与缓存计划的连接使用的设置不同(因此无法重复使用);或者
  3. 这是一个临时批处理,您的查询文本与缓存版本不完全匹配
  4. 您在原始计划参数化的地方使用了文字值