`
sjk2013
  • 浏览: 2186443 次
文章分类
社区版块
存档分类
最新评论

oracle 执行计划和执行顺序

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

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) OFDEPT(Cost=1 Card=3 Bytes=36)

31TABLE ACCESS (FULL) OFEMP(Cost=1 Card=16 Bytes=304)

注意这个执行计划的最左边的两个列,第一个列是步骤的ID,第二个列是父步骤的ID。执行从ID=0的行开始:

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

这个步骤没有父步骤,有一个子步骤(ID=1),所以这个ID1的步骤必须在执行步骤0之前执行。继续观察ID=1的步骤:

10HASH JOIN (Cost=3 Card=8 Bytes=248)

这个步骤是ID=0的步骤的子步骤,该步骤有2个子步骤:ID=2ID=3,因此ID=2ID=3的步骤必须在ID=1的步骤之前执行。再来检查ID=2的步骤:

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

这个步骤是ID=1的步骤的子步骤,并且该步骤没有任何子步骤。因此该步骤是这个SQL语句第一个执行的步骤,这个步骤产生的结果集会提供给ID=1的步骤。这个步骤是对表DEPT进行全表扫描,这个步骤的COST1

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

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

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

ID=1的步骤将ID=3ID=3的步骤的结果集进行HASH连接,然后把结果交给ID=0的步骤,就完成了本语句的执行。

这里是转载白鳝大大的一篇文章,对于执行计划读取入门,还是很清楚简单明了的。

分享到:
评论

相关推荐

    Oracle执行计划详解

    Oracle执行计划详解,包括oracle执行顺序和索引详细介绍

    oracle 执行计划 详解

    自己动手总结出来的所有的东西都有例子,执行计划的分析,访问路径分析,执行顺序分析方法,执行计划的解读方法,刚近公司,带我的人要我做的,也是想帮我好好理解,现在拿来分享下

    oracle执行计划

    执行计划表示了SQL语句执行顺序与方法。 执行计划的存储方式: 一但产生执行计划。这个计划就会和sql语句一起存储在library cache中。sql语句按照hash的算法,产生hash 值,这里,我们可以把hash值当做一个PK值,...

    oracle触发器执行顺序.pdf

    oracle触发器执行顺序.pdf

    Oracle数据库的执行计划稳定性分析

    ORACLE提供了在SQL中 使用HINTS来引导优化器产生我们想要的执行计划的能力。这在多表连接、复杂查询中特别有效。HINTS的类型很多,可以设置优化器目标,可以指定表连接的顺序,可以指定使用哪个表的哪个索引等等,...

    看懂执行计划之执行顺序-XPLAN包

    可以显示执行计划对应执行顺序的工具包

    Oracle Form 触发器的执行顺序

    Oracle Form 触发器的执行顺序

    oracle sql执行过程(流程图)

    5)选择优化器,不同的优化器一般产生不同的“执行计划” 6)选择连接方式,ORACLE有三种连接方式,对多表连接ORACLE可选择适当的连接方式。7)选择连接顺序,对多表连接ORACLE选择哪一对表先连接,选择这两表中...

    查看执行计划顺序包

    xplan 包是是对DMBS_XPLAN包的扩展,可以执行显示SQL语句的执行顺序(有一个ORDER列表示)。

    oracle forms 触发器执行顺序

    oracle ebs forms开发

    SQL语句执行顺序说明

    关于SQL语句在进入oracle库缓存之后的执行顺序的简析~!

    Oracle DML触发器的执行顺序.pdf

    Oracle DML触发器的执行顺序.pdf

    oracle select执行顺序的详解

    SQL Select语句完整的执行顺序:1、from子句组装来自不同数据源的数据;2、where子句基于指定的条件对记录行进行筛选;3、group by子句将数据划分为多个分组;4、使用聚集函数进行计算;5、使用having子句筛选分组;...

    ORACLE-Select语句执行顺序及如何提高Oracle基本查询效率.pdf

    ORACLE-Select语句执行顺序及如何提高Oracle基本查询效率.pdf

    在Oracle里加快SQL执行的三种方法

    Oracle必须花费大量的时间来剖析多表格的合并,用以确定表格合并的最佳顺序。如果SQL表达式涉及七个乃至更多的表格合并,那么有时就会...使用ordered提示会跳过非常耗时和耗资源的剖析操作,并加快Oracle SQL的执行。

    如何用智能优化器提高Oracle的性能

    但是聪明的Oracle DBA和开发人员能够改变表的搜索限制参数或者使用ordered提示来手工指定表的连接顺序,从而显著地减少优化和执行新查询所需的时间。消耗在准备新的SQL语句的时间是Oracle SQL语句执行时间的最重要的...

    通过分析SQL语句的执行计划优化SQL(六)

    每步的编号反映了在你观察执行计划时所示步骤的顺序。一般来说这并不是每一步被执行的先后顺序。执行计划的每一步或者从数据库中检索行,或者接收来自一个或多个行源的行数据作为输入。由红色字框指出的步骤从数据库...

Global site tag (gtag.js) - Google Analytics