2

我读到 oracle 的 CBO(最新版本)非常好,即使给出了最差的连接顺序,CBO 也会自动采用最佳连接顺序。那么像 ORDERED 这样的提示对最近的版本(10,11)有什么好处吗?CBO 是否有可能错过最佳加入顺序?谢谢。

4

2 回答 2

4

我个人的经验是,使用 Oracle 10g / 11g,您几乎无法通过提示改进任何查询。大多数情况下,他们以您认为最佳的方式表现得更差。CBO确实得到了极大的改善。

查询转换工具仍然存在一些(非常遥远的)限制,特别是对于相当复杂OUTER JOIN的结构,因为在内部,ANSI 语法仍然映射到一些涉及(+)运算符的古老 Oracle 结构。除此之外,以及其他非常遥远的情况,我认为不再需要提示。

您可以通过重写一些 SQL 或添加约束/索引来更好地调整。当然,只有当您的统计数据和直方图正确、最新且合理时,这些事情才成立,正如 skaffman 正确评论的那样

于 2011-05-13T10:35:13.133 回答
1

Oracle CBO 结果取决于太多参数,以至于我几乎无法预测实际系统中的结果计划。作为一般规则,我建议您不要使用提示,如果您不确定必须使用它们。

关于ORDERED从我的经验中得到的提示,您很少需要告诉 Oracle 连接的确切顺序。

无论如何,找出答案的最佳方法是自己进行一些实验,尝试并选择最佳解决方案:)

我建议您阅读 Tom Kyte 的 Effective Oracle by Design - 关于查询优化和 CBO 如何工作的非常好的一章。

于 2011-05-13T10:39:17.110 回答