我在两种情况下都使用相同的查询,除了我将ad hoc案例中使用的变量转换为使用sp_executesql时传入的参数。我最初的印象是,如果sp_executesql重新使用缓存中已有的计划,那么计划的唯一区别就在于此。但是,我发现即使计划缓存为空,计划也会有所不同。
进一步的测试似乎表明,虽然sp_executesql使用参数嗅探(根据给定的特定参数选择最佳计划),但是即席查询却没有。我得出了这个结论,因为测试的两个版本的临时案例:1正常和1我在所有变量上使用OPTIMIZE FOR UNKNOWN,并且在我尝试的几个案例中计划是相同的。
任何人都可以确认确实是这种情况,特殊查询不会像sp_executesql对参数那样基于变量值进行优化吗?