我的DBA告诉我,在访问特定的一组视图时,我应该始终在我的SQL语句中使用OPTION (FORCE ORDER)
。我理解这是为了防止服务器否决他的连接顺序。
足够公平 - 值得让DBA保持高兴,我很乐意遵守。
但是,我想在我自己的架构中写几个视图,但显然不支持。
那么,在撰写我的观点时,我可以达到同样的目的,即强制执行OPTION (FORCE ORDER)
吗?
由于 佛瑞德
答案 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中的连接顺序(以及强制它们之间的连接顺序和算法)。
但我不建议这样做。这些类型的提示只能在不能以任何其他方式获得令人满意的计划后,在最后的手段中以极其有针对性的方式使用。在没有测试替代方案的情况下,这不是政策问题。