一尘不染

T / F:在过程中使用IF语句会产生多个计划

sql

在回答这个问题时,KM说

如果您使用的是SQL Server
2005或更高版本,则可以使用IF在同一过程中进行多个查询,并且每个查询都将为其保存一个查询计划(相当于旧版本中的每个过程),请参见我的答复中的文章。或指向正确部分的链接:sommarskog.se/dyn-
search-2005.html#IF

HLGEM添加了

您也可以在SQL Server的早期版本中执行此操作。

我读了Sommarskog出色文章的那一部分,但没有看到有关多个计划的任何内容。

在以后的研究中,我在这里阅读了格特·德雷珀斯的一句话:

因为SQL Server每个存储过程只允许一个执行计划,所以…

我不知道该原始文章的日期或他所指的SQL Server版本。

有没有人能提供可靠的参考资料来讨论这个问题,或者更好的是,有一个测试证明这一点是正确的?


阅读 119

收藏
2021-03-17

共1个答案

一尘不染

我们都是正确的:-)

  • 一个“查询计划”在缓存中最多具有2个条目:一个串行和一个并行

  • 每个用户都有运行计划的自己的“执行上下文”

  • 如果对象不合格,则计划会有所不同

因此,您可能认为的是计划不是因为表不符合架构要求(在SQL Server 2000、2005和2008中是相同的)

来自MSDN / BOL“执行计划缓存和重用

2021-03-17