PARENT
FIRSTCHILD
SECOND CHILD
在这个例子里,FIRST CHILD最先执行,然后是SECOND
CHILD,这两个步骤执行完毕后,执行PARENT。下面是一个更多层次的结构:
PARENT1
FIRSTCHILD
FIRSTGRANDCHILD
SECOND CHILD
FIRSTGRANDCHILD是第一个执行的步骤,然后是FIRST
CHILD。下面通过一个真实的执行计划来验证这个原则:
set autotrace traceonly explain
select ename,dnamefrom emp, dept
where emp.deptno=dept.deptno
and dept.dname in
(‘ACCOUNTING’,’RESEARCH’,’SALES’,’OPERATIONS’);
15 rows selected.
这个语句的执行计划如下:
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=8 Bytes=248)
10HASH JOIN (Cost=3
Card=8 Bytes=248)
21TABLE ACCESS (FULL)
OF‘DEPT’(Cost=1
Card=3 Bytes=36)
31TABLE ACCESS (FULL)
OF‘EMP’(Cost=1
Card=16 Bytes=304)
注意这个执行计划的最左边的两个列,第一个列是步骤的ID,第二个列是父步骤的ID。执行从ID=0的行开始:
0SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=8
Bytes=248)
这个步骤没有父步骤,有一个子步骤(ID=1),所以这个ID=1的步骤必须在执行步骤0之前执行。继续观察ID=1的步骤:
10HASH
JOIN (Cost=3 Card=8 Bytes=248)
这个步骤是ID=0的步骤的子步骤,该步骤有2个子步骤:ID=2和ID=3,因此ID=2和ID=3的步骤必须在ID=1的步骤之前执行。再来检查ID=2的步骤:
21TABLE
ACCESS (FULL) OF ‘DEPT’ (Cost=1 Card=3 Bytes=36)
这个步骤是ID=1的步骤的子步骤,并且该步骤没有任何子步骤。因此该步骤是这个SQL语句第一个执行的步骤,这个步骤产生的结果集会提供给ID=1的步骤。这个步骤是对表DEPT进行全表扫描,这个步骤的COST=1。
ID=1的步骤也依赖ID=3的步骤:
31TABLE
ACCESS (FULL) OF ‘EMP’ (Cost=1 Card=16 Bytes=304)
这个步骤是ID=1的步骤的第二个子步骤,没有任何子步骤,在这个语句中,是第二个被执行的步骤。
ID=1的步骤将ID=3和ID=3的步骤的结果集进行HASH连接,然后把结果交给ID=0的步骤,就完成了本语句的执行。
这里是转载白鳝大大的一篇文章,对于执行计划读取入门,还是很清楚简单明了的。
相关推荐
Oracle执行计划详解,包括oracle执行顺序和索引详细介绍
自己动手总结出来的所有的东西都有例子,执行计划的分析,访问路径分析,执行顺序分析方法,执行计划的解读方法,刚近公司,带我的人要我做的,也是想帮我好好理解,现在拿来分享下
执行计划表示了SQL语句执行顺序与方法。 执行计划的存储方式: 一但产生执行计划。这个计划就会和sql语句一起存储在library cache中。sql语句按照hash的算法,产生hash 值,这里,我们可以把hash值当做一个PK值,...
oracle触发器执行顺序.pdf
ORACLE提供了在SQL中 使用HINTS来引导优化器产生我们想要的执行计划的能力。这在多表连接、复杂查询中特别有效。HINTS的类型很多,可以设置优化器目标,可以指定表连接的顺序,可以指定使用哪个表的哪个索引等等,...
可以显示执行计划对应执行顺序的工具包
Oracle Form 触发器的执行顺序
5)选择优化器,不同的优化器一般产生不同的“执行计划” 6)选择连接方式,ORACLE有三种连接方式,对多表连接ORACLE可选择适当的连接方式。7)选择连接顺序,对多表连接ORACLE选择哪一对表先连接,选择这两表中...
xplan 包是是对DMBS_XPLAN包的扩展,可以执行显示SQL语句的执行顺序(有一个ORDER列表示)。
oracle ebs forms开发
关于SQL语句在进入oracle库缓存之后的执行顺序的简析~!
Oracle DML触发器的执行顺序.pdf
SQL Select语句完整的执行顺序:1、from子句组装来自不同数据源的数据;2、where子句基于指定的条件对记录行进行筛选;3、group by子句将数据划分为多个分组;4、使用聚集函数进行计算;5、使用having子句筛选分组;...
ORACLE-Select语句执行顺序及如何提高Oracle基本查询效率.pdf
Oracle必须花费大量的时间来剖析多表格的合并,用以确定表格合并的最佳顺序。如果SQL表达式涉及七个乃至更多的表格合并,那么有时就会...使用ordered提示会跳过非常耗时和耗资源的剖析操作,并加快Oracle SQL的执行。
但是聪明的Oracle DBA和开发人员能够改变表的搜索限制参数或者使用ordered提示来手工指定表的连接顺序,从而显著地减少优化和执行新查询所需的时间。消耗在准备新的SQL语句的时间是Oracle SQL语句执行时间的最重要的...
每步的编号反映了在你观察执行计划时所示步骤的顺序。一般来说这并不是每一步被执行的先后顺序。执行计划的每一步或者从数据库中检索行,或者接收来自一个或多个行源的行数据作为输入。由红色字框指出的步骤从数据库...