2

在这两种情况下,我都使用相同的查询,除了我将临时案例中使用的变量转换为使用 sp_executesql 时传入的参数。我最初的印象是,计划的唯一区别是 sp_executesql 是否重新使用了缓存中已经存在的计划。但是,我发现即使计划缓存为空,计划也会有所不同。

进一步的测试似乎表明,虽然 sp_executesql 使用参数嗅探(根据给定的特定参数选择最佳计划),但 ad hoc 查询却没有。我得出这个结论是因为测试了 2 个版本的临时案例:1 个正常版本和 1 个版本,我在所有变量上使用 OPTIMIZE FOR UNKNOWN,并且在我尝试的几个案例中计划是相同的。

任何人都可以确认情况确实如此,即席查询不会像 sp_executesql 使用参数那样基于变量值进行优化吗?

4

0 回答 0