with recompile 不太明白。有两点疑问msdn是这样说的
如果为过程提供的参数不是典型的参数,并且新的执行计划不应被缓存或存储在内存中,则 WITH RECOMPILE 子句会很有用
1:头一次执行查询。传递@Table = atable 参数后执行
SELECT * FROM @Table
这会执行计划会被高速缓存到内中
如果 传递@Table = btable 时将不使用头一次的执行计划了吧?如果传递的参数不只一个那每一次的查询都不相同。这个每次都要使用with recompile来创建新的执行计划吗?
如果为过程提供的参数不是典型的参数,并且新的执行计划不应被缓存或存储在内存中,则 WITH RECOMPILE 子句会很有用
1:头一次执行查询。传递@Table = atable 参数后执行
SELECT * FROM @Table
这会执行计划会被高速缓存到内中
如果 传递@Table = btable 时将不使用头一次的执行计划了吧?如果传递的参数不只一个那每一次的查询都不相同。这个每次都要使用with recompile来创建新的执行计划吗?
参数的具体数值改变时(比如简单的数据类型),一般是不用重新生成执行计划的,
但如果你的参数会改变很多(比如像你的例子中是一个表),就可能需要新的执行计划。