先从最开头一直往右看,直到看到最右边的并列的地方,对于不并列的,靠右的先执行:对于并列的,靠上的先执行。
      即并列的缩进块,从上往下执行,非并列的缩进块,从下往上执行。

如下示例:

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   NESTED LOOPS
   2    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_HOST_BATCH_DTL'
   3    2       INDEX (RANGE SCAN) OF 'XIE2TB_HOST_BATCH_DTL' (NON-UNIQUE)
   4    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_BATCH_TRAN_CTRL'
   5    4       INDEX (UNIQUE SCAN) OF 'SYS_C0034652' (UNIQUE)

不妨假设最右边的数据为行号,语句执行是按块进行的。
从上述执行计划的开头一直往右看,直到找到最右边并列的。也就是从SELECT STATEMENT开始往右找。
找到一级缩进块,只有一个,没有优先级可言,如下:
   1    0   NESTED LOOPS
   2    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_HOST_BATCH_DTL'
   3    2       INDEX (RANGE SCAN) OF 'XIE2TB_HOST_BATCH_DTL' (NON-UNIQUE)
   4    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_BATCH_TRAN_CTRL'
   5    4       INDEX (UNIQUE SCAN) OF 'SYS_C0034652' (UNIQUE)

再在一级缩进块中找二级缩进块,找到两个,如下:
   第一个二级缩进块:
   2    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_HOST_BATCH_DTL'
   3    2       INDEX (RANGE SCAN) OF 'XIE2TB_HOST_BATCH_DTL' (NON-UNIQUE)
   第二个二级缩进块:
   4    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_BATCH_TRAN_CTRL'
   5    4       INDEX (UNIQUE SCAN) OF 'SYS_C0034652' (UNIQUE)

按照并列块从上往下执行的原则,第一个二级缩进块的所有语句将优先于第二个二级缩进块的语句执行。
而两个二级缩进块执行完,才能执行一级缩进块,这是因为非并列的缩进块,从下往上执行。

再在二级缩进块中找三级缩进块。
第一个二级缩进块中只有一个三级缩进块,如下:
   3    2       INDEX (RANGE SCAN) OF 'XIE2TB_HOST_BATCH_DTL' (NON-UNIQUE)
由于没有更低层级的缩进块,因此,该块最先执行。然后执行二级缩进块。

第二个二级缩进块中也只有一个三级缩进块,如下:
   5    4       INDEX (UNIQUE SCAN) OF 'SYS_C0034652' (UNIQUE)
二级缩进块中没有更低层次的缩进块了,因此,执行完第一个二级缩进块的所有语句后,便执行此三级缩进块,再执行对应的二级缩进块。

两个二级缩进块均执行完成后,再执行整个一级缩进块。

因此,若按行排序,语句的执行顺序便是: 3 -> 2 -> 5 -> 4 -> 1, 即:

3    2       INDEX (RANGE SCAN) OF 'XIE2TB_HOST_BATCH_DTL' (NON-UNIQUE)   ->
   2    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_HOST_BATCH_DTL'           ->
   5    4       INDEX (UNIQUE SCAN) OF 'SYS_C0034652' (UNIQUE)               ->
   4    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_BATCH_TRAN_CTRL'          ->
   1    0   NESTED LOOPS

执行计划顺序的理论解释:
执行计划是按一定规则显示的,如下:
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   NESTED LOOPS
   2    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_HOST_BATCH_DTL'
   3    2       INDEX (RANGE SCAN) OF 'XIE2TB_HOST_BATCH_DTL' (NON-UNIQUE)
   4    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_BATCH_TRAN_CTRL'
   5    4       INDEX (UNIQUE SCAN) OF 'SYS_C0034652' (UNIQUE)
第一个列是步骤的ID (相当于我们说的行号)
第二个列是父步骤的ID 
第三个列是该步骤要进行的操作。
在执行过程中,父步骤依赖于子步骤。只有对应的所有子步骤执行完,才能执行父步骤。

因此,步骤0的子步骤为1, 步骤1的子步骤为2,4, 步骤2子步骤为3,步骤4的子步骤为5, 步骤3,5没有子步骤了。
故步骤3所在的模块,或步骤5所在的模块先执行。但步骤3排在步骤5的前面,故步骤3所在的模块先执行。因此,顺序仍是:
3 -> 2 -> 5 -> 4 -> 1

Oracle执行计划顺序的更多相关文章

  1. 【Oracle】【9】阅读oracle执行计划

    正文: 工具:PLSQL 1,配置执行计划需要显示的项 工具→首选项→窗口类型→计划窗口→根据需要配置要显示在执行计划中的列 2,打开执行计划 在SQL窗口执行完一条select语句后按 F5 即可查 ...

  2. Oracle执行计划详解

    Oracle执行计划详解 --- 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介:   ...

  3. 【转】Oracle执行计划解释

    Oracle执行计划解释 一.相关的概念     Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的. 对每个表都有一个rowid的伪列,但是表中并不物 ...

  4. 看懂Oracle执行计划

    最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问 ...

  5. oracle 执行计划详解

    简介:     本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容.     并有总结和概述,便于理解与记忆! +++ 目录 ---     一.相关的概念    ...

  6. [转]Oracle执行计划详解

    Oracle执行计划详解 --- 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介:   ...

  7. Oracle执行计划 explain plan

    Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的. 对每个表都有一个rowid的伪列,但是表中并不物理存储ROWID列的值.不过你可以像使用其它列那样 ...

  8. 转:Oracle 执行计划(Explain Plan) 说明

    Oracle 执行计划(Explain Plan) 说明 原贴地址:http://blog.csdn.net/tianlesoftware/article/details/5827245   如果要分 ...

  9. [转]看懂Oracle执行计划

    原文地址:https://www.cnblogs.com/Dreamer-1/p/6076440.html 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径 ...

随机推荐

  1. Grunt 入门

    转自:http://user.qzone.qq.com/174629171/blog/1404433906 Grunt被定义为:the javascript task runner. 什么算是Java ...

  2. iOS纯代码工程手动快速适配

    首先说下让自己的程序支持iPhone6和6+,第一种使用官方提供的launch screen.xib,这个直接看官方文档即可,这里不再多述:第二种方法是和之前iPhone5的类似,比较简单,为iPho ...

  3. Android L(5.0)源码之手势识别OnTouchListener

    在Activity中,因为要监听触摸屏的触摸事件和手势时间,所以该Activity必须实现OnTouchListener和OnGestureListener两个接口,并重写其中的方法.本人根据andr ...

  4. Keil MDK从未有过的详细使用讲解

    转自博客:http://blog.csdn.net/zhzht19861011/article/details/5846510 这博主关于MDK 的使用的文章,写的得TM的好  TM的实用! 真心收藏 ...

  5. MYSQL最大连接数修改

    MYSQL数据库安装完成后,默认最大连接数是100,一般流量稍微大一点的论坛或网站这个连接数是远远不够的,增加默认MYSQL连接数的方法有两个 方法一:进入MYSQL安装目录 打开MYSQL配置文件 ...

  6. nodejs抓取数据二(列表解析)

    这里做得比较暴力,没有分页取出数据解析,O(∩_∩)O哈哈~,居然没有被挂机.不过解析的坑特别多...不过大部分我想要的数据都拿到了. //解析列表数据 var http = require(&quo ...

  7. js实现的文章输入检查与测速。(纯js版本)

    朋友又提出一些需求.希望不要jquery .于是修改成js版本. <!DOCTYPE html> <html> <head> <meta charset=&q ...

  8. [转]centos 6.5安装caffe

    centos 6.5安装caffe 原文地址:http://blog.csdn.net/wqzghost/article/details/47447377   总结:在安装protobuf,hdf5等 ...

  9. css清除浮动大全,共8种方法

    我看的网页的网址:http://hi.baidu.com/kongcheng2012/item/2b1250d4452e802538f6f705 为什么浮动这么难? 因为浮动会使当前标签产生向上浮的效 ...

  10. BZOJ 2179FFT快速傅立叶

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2179 题目大意:给出两个n位10进制整数x和y,你需要计算x*y. 题解:FFT,不会的可以 ...