基于提示的 Oracle SQL 调优——对最近的版本有啥好处?

Posted

技术标签:

【中文标题】基于提示的 Oracle SQL 调优——对最近的版本有啥好处?【英文标题】:Oracle SQL tuning based on hints- any good on recent versions?基于提示的 Oracle SQL 调优——对最近的版本有什么好处? 【发布时间】:2011-05-13 10:28:12 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

您所说的仅适用于针对具有最新统计信息的表的查询。情况并非总是如此,正如我们所希望的那样。【参考方案2】:

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

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

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

我建议您阅读 Tom Kyte 的 Effective Oracle by Design - 有一章非常好,介绍了查询优化和 CBO 的工作原理。

【讨论】:

以上是关于基于提示的 Oracle SQL 调优——对最近的版本有啥好处?的主要内容,如果未能解决你的问题,请参考以下文章

记一次基于CBO的Oracle SQL调优

Oracle-第一篇一些调优技巧

Oracle SQL调优系列之定位生产性能问题方法

对Tomcat 8.0进行JVM层面的优化(基于Oracle JDK 8)

如何优化SQL语句

如何对Oracle sql 进行性能优化的调整