oracle执行计划顺序

     如果要了解执行计划和执行顺序,必须理解执行计划的父子关系。执行计划是一个树状结构,顶层的STATEMENT是这棵树的根。父子关系按照如下的树状结构组织:

PARENT

FIRST CHILD

SECOND CHILD

     执行的时候,FIRST CHILD最先执行,然后是SECOND CHILD,这两个步骤执行完毕后,执行PARENT。

 

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3551968854
--------------------------------------------------------------------------------
| Id  | Operation                          | Name                 | Rows  | Byte
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                   |                      |   323 | 7655
|*  1 |  HASH JOIN RIGHT OUTER             |                      |   323 | 7655
|   2 |   TABLE ACCESS FULL                | JJ_RENYUAN           |  1285 | 2827
|*  3 |   HASH JOIN                        |                      |   323 | 6944
|*  4 |    HASH JOIN                       |                      |    89 | 1432
|*  5 |     HASH JOIN                      |                      |    89 | 1326
|*  6 |      HASH JOIN RIGHT OUTER         |                      |    89 | 1139
|   7 |       TABLE ACCESS FULL            | JJ_JIGOU             |   151 |  271
|   8 |       NESTED LOOPS                 |                      |    89 |  979
|   9 |        NESTED LOOPS                |                      |    91 |  946
|* 10 |         TABLE ACCESS FULL          | JJ_SHENGQINGJIAN5    |    91 |  136
|* 11 |         TABLE ACCESS BY INDEX ROWID| JJ_SHENGQINGJIAN1    |     1 |    8
|* 12 |          INDEX UNIQUE SCAN         | PK_JJ_SHENGQINGJIAN1 |     1 |
|* 13 |        INDEX UNIQUE SCAN           | SYS_C0080195         |     1 |
|  14 |      TABLE ACCESS FULL             | JJ_SHENGQINGJIAN3    |  7221 |   14

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|  15 |     TABLE ACCESS FULL              | JBPM_TOKEN           |  7716 | 9259
|  16 |    TABLE ACCESS FULL               | JBPM_TASKINSTANCE    | 27728 |  146
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("RY2"."RENYUAN_ID"(+)=TO_NUMBER("TI"."ACTORID_"))
   3 - access("TI"."TOKEN_"="TOO"."ID_")
   4 - access("TOO"."PROCESSINSTANCE_"="TP"."ID_")
   5 - access("F"."SHENQINGJIAN_ID"="S3"."SHENQINGJIAN_ID")
   6 - access("JG"."JIGOU_ID"(+)="F"."JIGOU_ID")
  10 - filter("S5"."FINALFLAG"='1' AND "S5"."UPDATETIME">=TO_DATE(' 2008-07-23 0
              'syyyy-mm-dd hh24:mi:ss') AND "S5"."UPDATETIME"<=TO_DATE(' 2012-08
              hh24:mi:ss'))
  11 - filter("F"."YINHANG_NO"='04xx' AND "F"."STATUS"='089-125')
  12 - access("F"."SHENQINGJIAN_ID"="S5"."SHENQINGJIAN_ID")
  13 - access("TP"."ID_"=TO_NUMBER("F"."FLOWID"))

38 rows selected

 

    依靠缩进关系来看:先从最开头一直往右看,直到看到最右边的并列的地方,对于不并列的,靠右的先执行;如果见到并列的,就从上往下看,对于并列的,靠上的先执行。

 

    按照树状结构,可通过后序遍历(有文章说中序,我认为是后序,左右根的顺序)。

    查询v$sql_plan 可获得执行计划顺序表:

 

select  id,parent_id                         
   from v$sql_plan  
   where plan_hashvalue=3551968854;

   查询结果如下:

 

 

IDPARENT_ID
0
10
21
31
43
54
65
76
86
98
109
119
1211
138
145
154
163

 根据表中子节点和父节点之间的关系,得到如下二叉树:

 

 

 

后序遍历得到的顺序为2、7、10、12、11、9、13、8、6、14、5、15、4、16、3、1、0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值