一、获取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完成查询;

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

EXPLAIN PLAN获取SQL语句执行计划相关推荐

  1. oracle的sql执行计划语句,最权威Oracle获取SQL语句执行计划大全

    该文档为根据相关资料整理.总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威.最正确的方法.步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅 ...

  2. 使用explain查询select查询语句执行计划

    1.使用explain查询select查询语句执行计划 mysql> select * from baba where name ='fjdsjf'; +------+--------+ | i ...

  3. Oracle 查看sql语句执行计划方法

    注意这篇文章只介绍查看sql语句执行计划的方法, 并不是说明如何看懂执行计划. 一般来讲, 直接在sqlplus 执行 set autotrace on; 就可以了 其前提是登陆用户必须有视图  v_ ...

  4. 【DB笔试面试600】在Oracle中,如何获取SQL历史执行计划?

    ♣题目 部分 在Oracle中,如何获取SQL历史执行计划? ♣答案部分 历史执行计划只能从AWR中获取,如果AWR没有记录的话,那么就无法获取历史执行计划了,获取历史执行计划的命令如下所示: 1SE ...

  5. 执行计划 分析一条sql语句的效率 mysql_mysql的SQL语句执行计划分析:EXPLAIN

    数据库最常见的操作就是查询了,我们经常要用"SELECT"语法对已有的表进行某种检索,但是在实际应用中,查询前我们并不知道该查询会如何运行.会使用多少时间.会涉及多少字段和记录,每 ...

  6. oracle用EXPLAIN PLAN 分析SQL语句

    EXPLAIN PLAN 是一个很好的分析SQL语句的工具,它甚至可以在不执行SQL的情况下分析语句. 通过分析,我们就可以知道ORACLE是怎么样连接表,使用什么方式扫描表(索引扫描或全表扫描)以及 ...

  7. 通过 EXPLAIN 分析低效 SQL 的执行计划

    每个列的简单解释如下:  select_type:表示 SELECT 的类型,常见的取值有 SIMPLE(简单表,即不使用表连接 或者子查询).PRIMARY(主查询,即外层的查询).UNION(U ...

  8. DRDS分布式SQL引擎—执行计划介绍

    摘要: 本文着重介绍 DRDS 执行计划中各个操作符的含义,以便用户通过查询计划了解 SQL 执行流程,从而有针对性的调优 SQL. DRDS分布式SQL引擎 - 执行计划介绍 前言 数据库系统中,执 ...

  9. PostgreSQL查询当前执行中SQL的执行计划——pg_show_plans

    点击上方"蓝字" 关注我们,享更多干货! 执行计划存储 如果同样的SQL要执行很多遍,且每次都是同样的执行计划.每次都发生硬解析,则会消耗大量时间.类似于Oracle存放执行计划的 ...

最新文章

  1. [学习笔记]matlab
  2. mysql五-1:单表查询
  3. 在wsl下运行c语言,在Windows10通过WSL架设linux/gcc c语言学习环境
  4. 百度SEO快克工具包 1.5.0 官方版
  5. 文件服务器 之 VSFTPD的高手篇
  6. 男人这辈子挺难的 ^^^
  7. DevOpsSOP 基于阿里云VPC搭建Storm+Kafka+Zookeeper集群
  8. 接口测试系列:工作中所用(十:配置文件的读写操作 configparser模块)
  9. 插件化开发与GUI开发
  10. hdu Train Problem I 栈的基本应用
  11. 应用程序正常初始化(0xc0150002)失败
  12. 同一工作组无法访问另一计算机,同一工作组无法访问如何解决【详解】
  13. 域名系统几类服务器,域名服务器可分为什么类型
  14. 论文阅读:Ultra Wide View Based Panoramic VR Streaming
  15. PTA 7-94 奇偶数判断
  16. [oracle]通过DBLINK远程查询带DBLINK的视图
  17. 【贪心】605. 种花问题
  18. Button控件的使用方法
  19. dodo:人脸识别方法个人见解
  20. Vuex状态刷新状态丢失的处理方法

热门文章

  1. ajax 文件数据流,Ajax如何读取数据流中的xml文件?
  2. oracle大量删除数据之后索引是否需要重建_oracle10g重建XDB
  3. Xamarin Essentials教程振动Vibration
  4. 查看数据库大小_查看Oracle 数据库的每天归档量及数据库大小
  5. python类实例化 输入参数名字 下划线_Python 的类的下划线命名有什么不同?
  6. Linux0.1源码分析,《Linux 0.01内核分析与操作系统设计——创造你自己的操作系统》...
  7. matlab用diag直接使用错误_你真的用对了卫生巾吗?这6个错误的使用方法,你占了几个...
  8. 汇编SF、CF、 OF 、ZF、 PF
  9. php注册表唯一电脑,PHP常见设计模式之注册表模式
  10. 脑电数据预处理-ICA去除伪影