在阅读Oracle SQL tuning guide时,我碰到了这样的一句话(您可以在此chapter中找到它):
计划生成器通过尝试不同的访问路径,联接方法和联接顺序来探索查询块的各种计划。
由于数据库可用于产生相同结果的各种组合,因此许多计划都是可行的。优化器选择成本最低的计划。
图4-2优化器组件
是否有可能以某种方式获得计划生成器生成的所有这些计划?
也许对此视图或系统视图有标准的PL / SQL包?
答案 0 :(得分:1)
通常,您不需要查看所有可能的计划,但是在某些情况下,有一个有趣的问题,为什么Oracle会放弃某些计划而改用另一种计划。
要回答这个问题,理想的输入项是Oracle产生的 10053跟踪。
沃尔夫冈·百年灵(Wolfgang Breitling)对此主题有一篇经典论文,可以找到here。
乔纳森·刘易斯(Jonathan Lewis)在他的Cost-Base Oracle Fundamentals中也专门为此主题专门撰写了第14章 10053跟踪。
Google肯定会提供其他参考。
警告语。 10053不是Oracle上下文中最简单的东西。同样,在每个发行版中,您可能希望输出发生变化。一个好的学习起点是调查在两个不同环境中产生不同执行计划的查询。简单地在两个数据库中进行10053跟踪,并进行文件比较并观察差异。您将看到优化器参数,对象或系统统计信息是否存在差异,以及这些更改如何影响最终执行计划的选择。