我读到oracle的CBO(在最近版本中)非常好,即使给出了最糟糕的连接顺序,CBO也会自动采用最佳连接顺序。那么像ORDERED这样的提示会对最新版本(10,11)有什么好处吗? CBO是否可能错过最佳连接顺序?感谢。
答案 0 :(得分:4)
我个人的经验是,使用Oracle 10g / 11g,您很难通过提示改进任何查询。大多数情况下,他们的表现会更糟糕,因为认为是最佳的。 CBO真正得到了极大的改善。
查询转换工具仍然存在一些(非常远程)限制,特别是对于相当复杂的OUTER JOIN
构造,因为在内部,ANSI语法仍然映射到涉及(+)
的一些古老的Oracle构造运营商。除此之外,还有其他非常偏远的案例,我认为不再需要提示了。
通过重写一些SQL或添加约束/索引,您可以更好地调整。当然,只有当你的统计数据和直方图是正确的,最新的和明智的时候,这些事情才适用,正如skaffman正确评论
答案 1 :(得分:1)
Oracle CBO结果取决于这么多参数,我几乎无法预测实际系统中的结果计划。作为一般规则,我建议您不要使用提示,如果您不确定必须使用它们。
关于ORDERED
提示,根据我的经验,您很少会告诉Oracle确切的连接顺序。
无论如何,找出最好的方法 - 自己做一些实验,尝试并选择最佳解决方案:)
我建议您阅读Tom Kyte的设计有效Oracle - 有一个关于查询优化以及CBO如何工作的非常好的章节。