使用sp_executesql(参数化)与ad-hoc时,为什么计划不同,即使计划缓存为空?

时间:2013-01-17 18:47:33

标签: sql-server

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

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

任何人都可以确认确实是这种情况,特殊查询不会像sp_executesql对参数那样基于变量值进行优化吗?

0 个答案:

没有答案