Oracle 执行计划阅读顺序的总原则是:先上后下,先里后外。
可以通过光标的移动来辅助确认:从 ID=0 开始,根据缩进向下移动,一直移动到出现并列处,并列者上面先执行。

-----------------------------------------------------------
| Id  | Operation                            | Name       |
-----------------------------------------------------------
|   0 | SELECT STATEMENT                     |            |
|   1 |  HASH GROUP BY                       |            |
|*  2 |   TABLE ACCESS BY INDEX ROWID BATCHED| EMP        |
|*  3 |    INDEX RANGE SCAN                  | EMP_JOB_ID |
-----------------------------------------------------------

执行顺序为: 3,2,1
光标从0开始向下找并列行,依次移动到 1,2,3 结束,所以执行顺序为:3,2,1。

-----------------------------------                  
| Id  | Operation          | Name |                  
-----------------------------------                  
|   0 | SELECT STATEMENT   |      |                  
|   1 |  UNION-ALL         |      |                  
|   2 |   TABLE ACCESS FULL| EMP  |                  
|   3 |   TABLE ACCESS FULL| DEPT |                  
|   4 |   FAST DUAL        |      |                  
-----------------------------------

执行顺序为:2,3,4,1
光标从0列始向下移动,移动到id=2时,出现并列,对于并列,从上到下执行,所以执行顺序为:2,3,4,1

------------------------------------------------  
| Id  | Operation                    | Name    |  
------------------------------------------------  
|   0 | SELECT STATEMENT             |         |  
|   1 |  NESTED LOOPS                |         |  
|   2 |   NESTED LOOPS               |         |  
|*  3 |    TABLE ACCESS FULL         | EMP     |  
|*  4 |    INDEX UNIQUE SCAN         | PK_DEPT |  
|*  5 |   TABLE ACCESS BY INDEX ROWID| DEPT    |  
------------------------------------------------

执行顺序为:3,4,2,5,1
光标从0列始向下移动,移动到id=3时,出现并列,执行完3后执行4,然后返回2,因为2与5并列,先执行2再执行5,然后返回1,执行1,故执行顺序为:3,4,2,5,1

------------------------------------------------  
| Id  | Operation                    | Name    |  
------------------------------------------------  
|   0 | SELECT STATEMENT             |         |  
|   1 |  NESTED LOOPS                |         |  
|   2 |   TABLE ACCESS FULL          | EMP     |  
|*  3 |   TABLE ACCESS BY INDEX ROWID| DEPT    |  
|*  4 |    INDEX UNIQUE SCAN         | PK_DEPT |  
------------------------------------------------

执行顺序:2,4,3,1
光标从0列始向下移动,移动到id=2时,出现并列,先执行2,然后执行3时,有缩进,光标向下移动到4,执行4,执行完4后返回3,执行3,执行完3后,返回1,执行1,故执行顺序为:2,4,3,1

------------------------------------------------
|   0 | SELECT STATEMENT             |         |
|*  1 |  FILTER                      |         |
|   2 |   TABLE ACCESS FULL          | EMP     |
|*  3 |   TABLE ACCESS BY INDEX ROWID| DEPT    |
|*  4 |    INDEX UNIQUE SCAN         | PK_DEPT |
|*  5 |   TABLE ACCESS FULL          | BONUS   |
------------------------------------------------

执行顺序:2,4,3,5,1
光标从0列始向下移动,移动到id=2时,出现并列,先执行2,然后执行3时,有缩进,光标向下移动到4,执行4,执行完4后返回3,执行3,执行完3后,执行并列的5,执行完5后,返回1,执行1,故执行顺序为:2,4,3,5,1

------------------------------------     
|   0 | UPDATE STATEMENT    |      |     
|   1 |  UPDATE             | EMP  |     
|   2 |   TABLE ACCESS FULL | EMP  |     
|   3 |   SORT AGGREGATE    |      |     
|*  4 |    TABLE ACCESS FULL| EMP  |     
|   5 |   SORT AGGREGATE    |      |     
|   6 |    TABLE ACCESS FULL| EMP  |     
------------------------------------

执行顺序:2,4,3,6,5,1
光标从0列始向下移动,移动到id=2时,出现并列,先执行2,然后执行3时,有缩进,光标向下移动到4,执行4,执行完4后返回3,执行3,执行完3后,执行并列的5,但有缩进,光标向下移动到6,执行6,执行完6后,返回5,执行完5后,返回1,执行1,故执行顺序为:2,4,3,6,5,1

----------------------------------------------------------
|   0 | SELECT STATEMENT                    |            |
|*  1 |  CONNECT BY WITH FILTERING          |            |
|*  2 |   TABLE ACCESS FULL                 | EMP        |
|   3 |   NESTED LOOPS                      |            |
|   4 |    CONNECT BY PUMP                  |            |
|   5 |    TABLE ACCESS BY INDEX ROWID      | EMP        |
|*  6 |     INDEX RANGE SCAN                | EMP_MGR_I  |   
----------------------------------------------------------

执行顺序:2,4,6,5,3,1
光标从0列始向下移动,移动到id=2时,出现并列,先执行2,然后执行3时,有缩进,光标向下移动到4出现并列,先执行4,然后执行并列的5时,有缩进,光标向下移动到6,执行6,执行完6后返回5,执行5,执行完5后返回3,执行3执行完3后返回1,执行1,故顺序为:2,4,6,5,3,1

-- By 许望(RHCA、OCM、VCP)
最后修改:2020 年 05 月 28 日 03 : 50 PM
如果觉得我的文章对你有用,请随意赞赏