据我所知,给定一个查询,Oracle 根据一些启发式尝试不同的方法,我猜最大的驱动因素是最小化要使用的行数,然后根据该因素和其他因素选择最佳的方法。当你写下
EXPLAIN PLAN
时,它就会给你最终选择的计划。
是否可以看到Oracle在选择估计执行计划时尝试过的其他替代方案?研究这样的事情:如果我有一个关于这种方式更有效的“理论”,并且我想知道为什么 Oracle 没有尝试这种方式,我可以“探索”其他替代方案,寻找符合我期望的替代方案,然后比较他们的估计成本和基数,以了解为什么 Oracle 认为另一个计划最差。
是否可以获得有关所选估计计划背后的基本原理的更多信息和/或比较不同的计划替代方案以了解其最终决定?
您可以进行 10053 跟踪。
alter session set events '10053 trace name context forever';
然后运行 SQL。
生成的跟踪文件将提供有关优化器做出某些决策的原因的详细信息。有几个博客和文档描述了如何阅读和解释它。
但是,在大多数情况下,没有必要 10053 跟踪解析。 Oracle 的大部分决策都是基于计划中每个步骤的预期行,这推动了有关计划中下一步的决策。通过检查执行计划中报告的预期行数,如果考虑到给定可用结构的选项,您通常可以理解为什么下一步是这样的。