dbdao吧 关注:1,183贴子:4,074
  • 2回复贴,共1

执行计划的实际执行次数疑问

取消只看楼主收藏回复

10.2.0.5 on windows 2008
以下sql,
select
count(av_sal)
from (
select
outer.dept_no,
outer.sal,
outer.emp_no,
outer.padding,
(
selectavg(inner.sal)
fromempinner
whereinner.dept_no = outer.dept_no
) av_sal
fromempouter
)
where
sal > av_sal
;
执行计划如附件,我的理解:
ID 5->ID 4,对于ID4返回的结果集里的每一行执行一次ID 1(这里由于distinct value,所以ID 1只执行了3次)
av_sal这个值由执行了3次ID 1得到的,那ID4先执行了(且要根据av_sal做一个过滤动作),ID 4 为何只执行了一次呢?
--------------------------------------------------------------------------------
------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buf
fers |
--------------------------------------------------------------------------------
------
| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.65 |
4641 |
| 1 | SORT AGGREGATE | | 6 | 1 | 6 |00:00:00.27 |
3978 |
|* 2 | TABLE ACCESS FULL | EMP | 6 | 3333 | 20000 |00:00:00.18 |
3978 |
| 3 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.65 |
4641 |
|* 4 | VIEW | | 1 | 20000 | 9998 |00:00:00.58 |
4641 |
| 5 | TABLE ACCESS FULL| EMP | 1 | 20000 | 20000 |00:00:00.12 |
663 |
--------------------------------------------------------------------------------
------
Predicate Information (identified by operation id):
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
----------------------------------------
---------------------------------------------------
2 - filter("INNER"."DEPT_NO"=:B1)
4 - filter("SAL">"AV_SAL")


1.txt
大小:1.81KB下载:3次转存:0次
文件已失效
1楼2016-04-10 17:12回复
    因为sqld360在windows上运行有点问题,所以我又把sql在11.2.0.4上执行:sqld360结果如下
    http://pan.baidu.com/s/1miSww0w


    4楼2016-04-12 08:32
    回复
      2026-01-19 21:15:17
      广告
      不感兴趣
      开通SVIP免广告
      不好意思,2和1应该是执行6次。
      其实我这里是想问:
      看上去3(执行一次)应该是控制的子节点
      那么这个地方是不是应该是树的右边先执行呢,5-》4-》3-》2-》1
      相关组合的特点
      子节点在父节点之前执行
      ID最小的子节点控制其他节点的执行
      子节点按照ID顺序执行,但并丌是 ID N执行完成后才执行ID N+1,而是交叉执行
      负责控制的子节点一般只运行一次,其他节点可能运行0次戒者很多次


      6楼2016-04-12 14:27
      回复