基于提示的 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 调优——对最近的版本有啥好处?的主要内容,如果未能解决你的问题,请参考以下文章