背景:本渣目前的工作是oracle数据库开发,刚从mysql转过来的时候,有极大的不适应!!经过两三个月的过渡,现在终于适应了DQL和存储过程的语法,熬过了这一阶段,才终于算是上了正轨。于是才有心思来研究一下进阶的东西,oracle的执行计划。
本文只讲述oracle执行计划的执行顺序,不涉及执行计划的具体底层活动(即每一步是干了什么,怎么实现的)。
如图,这是一个树形执行计划
文本格式:
那么如何来判断执行顺序呢?很简单,首先第一步,在树形执行计划中将所有子节点都合并省略,得到一个最简单的执行计划
按照从右往左、从上往下的顺序,先执行NESTED LOOPS,然后执行BUFFER SORT,参照文本格式的编号,执行顺序为 2 ,7,1,0。
然后打开2的子节点.
2的子节点里面先执行NESTED LOOPS,再执行TABLE ACCESS BY INDEX ROWID,参照文本格式的编号,即为3,6。
即可得到3,6,2,7,1,0。
同理,继续打开3的子节点:
先执行TABLE ACCESS FULL,再执行INDEX RANGE SCAN,即4,5。
合并得到4,5,3,6,2,7,1,0。
此时编号为2的节点,其包含的所有子节点的执行顺序已经出来了,可以看到编号7的节点也是有子节点的,该字节点编号为8
于是得到4,5,3,6,2,8,7,1,0。
是不是很简单咧!
本文参考:http://blog.itpub.net/30126024/viewspace-2141974/