执行计划分析

----------------------------------------------------------------------------------------------------------------------------
|     ID   |            操作                            |   名称   |   行数   |   字节   |   代价          |
----------------------------------------------------------------------------------------------------------------------------
|    0     |   SELECT STATMENT                            |               |              |              |                     |
|    1     |     SORT GROUP BY                               |               |              |              |                     |
|    2     |       MERGE JOIN                                     |               |              |              |                     |
|    3     |         SORT JOIN                                        |               |              |              |                     |
|    4     |            TABLE ACCESS FULL                         |  RESULTS |              |              |                     |
|    5     |         SORT JOIN                                        |               |              |              |                     |
|    6     |            TABLE ACCESS FULL                         |  WAIT_STATS |              |              |                     |


这样看:

从上往下数,数到前面空格最多的,很显然是4 ,(不是第6,因为5比4要少一个空格,不能越界),那么就是说ORACLE是从第4开始,
然后全表扫描results,然后往上做sort join,也就是做第3步

此时发现第3和第5空格数相等,所以不能往上了。 应该做6然后做5.

最后做2-》1-》结果


例如:
Execution Plan

----------------------------------------------------------

   0      SELECT STATEMENT ptimizer=CHOOSE (Cost=3 Card=8 Bytes=248)

   1    0   HASH JOIN (Cost=3 Card=8 Bytes=248)

   2    1     TABLE ACCESS (FULL) OF ‘DEPT’ (Cost=1 Card=3 Bytes=36)

   3    1     TABLE ACCESS (FULL) OF ‘EMP’ (Cost=1 Card=16 Bytes=304)



注意这个执行计划的最左边的两个列,第一个列是步骤的ID,第二个列是父步骤的

ID。执行从ID=0的行开始:

0      SELECT STATEMENT ptimizer=CHOOSE (Cost=3 Card=8 Bytes=248)

这个步骤没有父步骤,有一个子步骤(ID=1),所以这个ID=1的步骤必须在执行

步骤0之前执行。继续观察ID=1的步骤:

1    0   HASH JOIN (Cost=3 Card=8 Bytes=248)

这个步骤是ID=0的步骤的子步骤,该步骤有2个子步骤:ID=2和ID=3,因此ID=2和

ID=3的步骤必须在ID=1的步骤之前执行。再来检查ID=2的步骤:

2    1     TABLE ACCESS (FULL) OF ‘DEPT’ (Cost=1 Card=3 Bytes=36)

这个步骤是ID=1的步骤的子步骤,并且该步骤没有任何子步骤。因此该步骤是这个

SQL语句第一个执行的步骤,这个步骤产生的结果集会提供给ID=1的步骤。这个步

骤是对表DEPT进行全表扫描,这个步骤的COST=1。

ID=1的步骤也依赖ID=3的步骤:

3    1     TABLE ACCESS (FULL) OF ‘EMP’ (Cost=1 Card=16 Bytes=304)

这个步骤是ID=1的步骤的第二个子步骤,没有任何子步骤,在这个语句中,是第二

个被执行的步骤。

    ID=1的步骤将ID=2和ID=3的步骤的结果集进行HASH 连接,然后把结果交给

ID=0的步骤,就完成了本语句的执行。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14876437/viewspace-567206/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14876437/viewspace-567206/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值