在定义视图时如何让T-SQL执行OPTION(FORCE ORDER)?

时间:2017-03-12 19:11:05

标签: sql-server tsql query-optimization

我的DBA告诉我,在访问特定的一组视图时,我应该始终在我的SQL语句中使用OPTION (FORCE ORDER)。我理解这是为了防止服务器否决他的连接顺序。

足够公平 - 值得让DBA保持高兴,我很乐意遵守。

但是,我想在我自己的架构中写几个视图,但显然不支持。

那么,在撰写我的观点时,我可以达到同样的目的,即强制执行OPTION (FORCE ORDER)吗?

由于 佛瑞德

1 个答案:

答案 0 :(得分:4)

盲目地将OPTION (FORCE ORDER)附加到引用特定视图的所有查询上是非常糟糕的一揽子建议。

OPTION (FORCE ORDER)是一个查询提示,它们在视图中无效 - 您需要将它放在引用您自己的视图的所有查询的外层。

有效使用Join hints内部视图和

  

如果为任何两个表指定了连接提示,则查询优化器   自动强制执行所有已连接表的连接顺序   查询,基于ON关键字的位置。

所以

SELECT v1.Foo,
       v2.Bar
FROM   v1
       INNER HASH JOIN v2
         ON v1.x = v2.x;

将强制执行v1和v2中的连接顺序(以及强制它们之间的连接顺序和算法)。

但我不建议这样做。这些类型的提示只能在不能以任何其他方式获得令人满意的计划后,在最后的手段中以极其有针对性的方式使用。在没有测试替代方案的情况下,这不是政策问题。