博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EXPLAIN PLAN获取SQL语句执行计划
阅读量:5971 次
发布时间:2019-06-19

本文共 2076 字,大约阅读时间需要 6 分钟。

一、获取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,创建方法(可参考):@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完成查询;

 

 

转载于:https://www.cnblogs.com/toughhou/p/3778759.html

你可能感兴趣的文章
SQLSERVER排查CPU占用高的情况
查看>>
Swift中如何重新懒加载
查看>>
Vysor:安卓手机放到电脑上用
查看>>
AutoCompleteTextView的简单用法
查看>>
scala学习笔记(一)入门初探
查看>>
ios开发学习--列表(Table)效果源码分享--系列教程4
查看>>
布局管理器 2----- 表格布局
查看>>
开源 java CMS - FreeCMS2.8 自定义标签 channelSon
查看>>
nginx实现防止ddos攻击
查看>>
Fibonacii数列,兔子问题
查看>>
2016,成为更好的自己
查看>>
mysql双向复制(主主模式)
查看>>
我的友情链接
查看>>
【二叉树系列】二叉树课程大作业
查看>>
买台式电脑还是笔记本好?
查看>>
数1 游戏
查看>>
UILable文字不居中问题
查看>>
近期window7x64 打补丁之后IE11x64无法启动
查看>>
JDBC与ORM发展与联系 JDBC简介(九)
查看>>
第一个Mybatis程序示例 Mybatis简介(一)
查看>>