zoukankan      html  css  js  c++  java
  • EXPLAIN PLAN获取SQL语句执行计划

    一、获取SQL语句执行计划的方式
    1. 使用explain plan 将执行计划加载到表plan_table,然后查询该表来获取预估的执行计划
    2. 启用执行计划跟踪功能,即autotrace功能
    3. 使用PL/SQL Developer提供的获取执行计划方法 - F5键
    4. 查询动态性能视图v$sql_plan,v$sql_plan_statistics,v$sql_workarea 等来获取已缓存到库缓存中的真实执行计划
    5. 查询自动工作量资料库(Automatic Workload Repository)或查询Statspack,即从资料库中获取执行计划
    6. 使用Toad工具来获取执行计划

    二、用explain plan来获取SQL语句执行计划
    1. 工作实质
    将SQL语句预估的执行计划加载到表plan_table,是对表plan_table 执行了DML操作,故不会执行隐式提交。(可以对select,insert,update,merge,delete,create table, create index,alter index等加载执行计划到plan_table。)

    2. 前提条件
     需要先创建plan_table,创建方法(可参考Oracle的AUTOTRACE功能):@J:/oracle/product/10.2.0/db_1/RDBMS/ADMIN/utlxplan.sql
     对当前的SQL语句有执行权限以及对依赖的对象有相应操作的权限

    3. 使用方法:
      explain plan for select * from dept where deptno=20;    --未设置标记位
      explain plan set statement_id='t1' for select * from dept where deptno=20;  --设置标记位为T1

    SQL> explain plan set statement_id = 't1' for select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;

    SQL> col operation format a18
    SQL> col options format a15
    SQL> col "OBJECT NAME" format a12
    SQL> col order format a6
    SQL> col opt format a6
    SQL>
    SQL> SELECT LPAD(' ', 2 * (LEVEL - 1)) || operation "OPERATION",
      2      options "OPTIONS",
      3      DECODE(TO_CHAR(id),
      4          '0',
      5          'COST = ' || NVL(TO_CHAR(position), 'n/a'),
      6          object_name) "OBJECT NAME",
      7      id || '-' || NVL(parent_id, 0) || '-' || NVL(position, 0) "ORDER",
      8      SUBSTR(optimizer, 1, 6) "OPT"
      9  FROM plan_table
     10  START WITH id = 0
     11  AND statement_id = 't1'
     12  CONNECT BY PRIOR id = parent_id
     13  AND statement_id = 't1'  ;

    OPERATION          OPTIONS         OBJECT NAME  ORDER  OPT
    ------------------ --------------- ------------ ------ ------
    SELECT STATEMENT                   COST = 4     0-0-4  ALL_RO
      NESTED LOOPS                                  1-0-1
        TABLE ACCESS   FULL            EMP          2-1-1  ANALYZ
        TABLE ACCESS   BY INDEX ROWID  DEPT         3-1-2  ANALYZ
          INDEX        UNIQUE SCAN     PK_DEPT      4-3-1  ANALYZ

    查询结果中的order列与opt列
    order
         order列:ID-父ID-执行计划中这一步骤的位置
         ID列标识了这个步骤,但并没有说明执行的顺序
         父ID表明了这个步骤中的父步骤
         位置信息说明了父ID相同的子操作的执行顺序    
    opt
         说明当前优化器使用的模式

    SQL执行计划分析:
         1.从步骤2开始执行,步骤2对EMP表做全表扫描,把得到的结果返回步骤1;
         2.步骤4对DEPT表做唯一索引扫描,扫描的结果返回步骤3,步骤3根据INDEX ROWID找到对应的数据,并返回步骤1;
         3.此时,步骤1对前两步中返回的数据做JOIN,获得的最终结果集返回给步骤0,SQL完成查询;

     

  • 相关阅读:
    Unique Binary Search Trees——LeetCode
    Binary Tree Inorder Traversal ——LeetCode
    Maximum Product Subarray——LeetCode
    Remove Linked List Elements——LeetCode
    Maximum Subarray——LeetCode
    Validate Binary Search Tree——LeetCode
    Swap Nodes in Pairs——LeetCode
    Find Minimum in Rotated Sorted Array——LeetCode
    Linked List Cycle——LeetCode
    VR AR MR
  • 原文地址:https://www.cnblogs.com/toughhou/p/3778759.html
Copyright © 2011-2022 走看看