with recompile 和 Option(recompile) 之间的区别

0 sql-server optimization recompile

我在网上读过,它将with recompile重新编译整个过程,而Option(recompile)只会重新编译它所使用的特定语句。如果重新编译过程中的某个语句,是否会影响过程的其他部分,因为现在优化器具有更好的统计信息,以便稍后做出更好的决策(假设选项(重新编译)产生更好的统计信息),从而导致完全重新编译的程序?到底有何with recompile不同option(recompile)

Dav*_*oft 5

\n

使用重新编译和选项(重新编译)

\n

当遇到参数敏感性问题时,论坛和问答网站上的一个常见建议是重新编译 xe2x80x9d(假设前面介绍的其他调整选项不合适)。不幸的是,该建议经常被误解为向存储过程添加WITH RECOMPILE 选项。

\n

使用WITH RECOMPILE 可以有效地让我们返回到SQL Server 2000\n的行为,其中整个存储过程在每次执行时都会重新编译。

\n

在 SQL Server 2005 及更高版本上,更好的替代方法是仅对遇到参数嗅探问题的语句使用\nOPTION (RECOMPILE) 查询提示。此查询提示仅导致\n重新编译有问题的语句。存储过程中\n其他语句的执行计划将被缓存并按正常\n方式重用。

\n

使用WITH RECOMPILE 还意味着存储过程的编译计划不会被缓存。因此,DMV 中不会维护任何性能信息,例如 sys.dm_exec_query_stats。

\n

使用查询提示意味着可以缓存已编译的计划,并且可以在 DMV 中获取性能信息(尽管它仅限于最近执行的受影响语句)。

\n

对于至少运行 SQL Server 2008 内部版本 2746(具有累积更新 5 的 Service\nPack 1)的实例,使用 OPTION (RECOMPILE) 与使用 RECOMPILE 相比\n还有另一个显着优势:仅 OPTION (RECOMPILE)\n 启用参数嵌入优化。

\n
\n

参数嗅探、嵌入和 RECOMPILE 选项Paul White 的

\n