我已经阅读了 SQL Server 2008 OPTIMIZE FOR UNKNOWN 查询提示。我明白它是如何工作的。
但是,我有一个关于何时何地使用它的问题。它不能在 UDF 中指定。它可以在存储过程中指定。但是,此MSDN 博客文章指出以下内容:
4.将查询移动到存储过程中可以将其放入单独的过程上下文中,并且可以是使优化器看到该值的好方法(注意:这在 SQL 2000 中也适用)
在我看来,这似乎是说传递给存储过程的任何参数都将被“嗅探”,从而帮助 SQL Server 编译最佳执行计划。这意味着将重新访问/重新编译缓存的计划(不确定该机制)。然而,这令人困惑,因为它否定了 OPTIMIZE FOR UNKNOWN 的全部需求。
关于查询提示的 MSDN 文章没有涵盖我的问题。
有人可以为我回答这个问题,理想情况下,可以用指向微软的东西来解决这个问题。谢谢。