zoukankan      html  css  js  c++  java
  • 如何解析oracle执行计划

    要执行任何SQL语句,Oracle 必须推导出一个“执行计划”。查询的执行计划是 Oracle 将如何实现数据的检索,以满足给定 SQL 语句的描述。它只不过是其中包含的步骤及它们之间关系的顺序树。
    执行计划树的基本规则如下:
    执行计划将包含一个根,没有父(操作)
    父(操作)可以有一个或更多的子(操作),其ID将小于子(操作)ID
    一子(操作)可只有一个父(操作),显示时右缩进;含许多子(操作)时,缩进相同
    下面是一个执行计划示例。

    SQL> explain plan for
    2 select e.empno, e.ename, d.dname
    3 from emp e, dept d
    4 where e.deptno = d.deptno
    5 and e.deptno = 10;

    Explained.

    SQL> SELECT * FROM table(dbms_xplan.display(null,null,'basic'));

    PLAN_TABLE_OUTPUT
    ------------------------------------------------
    Plan hash value: 568005898

    ------------------------------------------------
    | Id | Operation | Name |
    ------------------------------------------------
    | 0 | SELECT STATEMENT | |
    | 1 | NESTED LOOPS | |
    | 2 | TABLE ACCESS BY INDEX ROWID| DEPT |
    | 3 | INDEX UNIQUE SCAN | PK_DEPT |
    | 4 | TABLE ACCESS FULL | EMP |
    ------------------------------------------------

    使用上述的规则,可以说:
    操作0是树的根,它有一个子操作,即操作1
    操作1有两个子操作,即操作2和4
    操作2有一子操作,即操作3
    下面是执行计划的图形表示。如果解读该树:为执行操作1,需执行操作2和4;操作2先完成;为执行2,需执行其子操作3;为执行操作4,需执行操作2。

    Operation 0
    (SELECT STATEMENT)
    |
    |
    |
    Operation 1
    (NESTED LOOPS)
    /
    /
    /
    /
    /
    /
    /
    /
    Operation 2 Operation 4
    (TABLE ACCESS (TABLE ACCESS FULL)
    BY INDEX ROWID)
    |
    |
    |
    Operation 3
    (INDEX UNIQUE SCAN)

    操作3访问DEPT表,使用 INDEX UNIQUE SCAN,并传递ROWID给操作2
    操作2从DEPT表返回所有行给操作1
    操作1对操作2返回的每一行执行操作4
    操作4执行全表扫描(TABLE ACCESS FULL),应用过滤器E. DEPTNO = 10,返回结果行给操作1
    操作1返回最后结果给操作0
  • 相关阅读:
    redis 使用 get 命令读取 bitmap 类型的数据
    如何用vue-router为每个路由配置各自的title
    vue定义全局变量和全局方法
    后端分布式系列:分布式存储-HDFS 与 GFS 的设计差异
    Android Studio(十二):打包多个发布渠道的apk文件
    Android中使用lambda表达式
    Android教程-03 常见布局的总结
    程序员的业余项目
    Android Studio(十一):代码混淆及打包apk
    win10提示 磁盘包含不是“PARTITION_BASIC_DATA_GUID"类型的分区
  • 原文地址:https://www.cnblogs.com/daishuguang/p/5106335.html
Copyright © 2011-2022 走看看