1.用explain plan for来获取执行计划

explain plan for <sql>;

select * from table(dbms_xplan.display());

结果如下:

---------------------------------------------------------------------------------------------------------------------

优点

  1. 不需要真实执行sql,方便快捷

缺点

  1. 这里的执行计划并不是真实的执行计划
  2. 不能获取运行时的相关统计信息(产生多少逻辑读,多少次递归调用,多少次物理读的情况)
  3. 无法判断表被访问了多少次
  4. 无法判断处理了多少行数据

---------------------------------------------------------------------------------------------------------------------

2.用autotrace 来获取执行计划

SET AUTOTRACE OFF  --此为默认值,即关闭Autotrace 

SET AUTOTRACE ON EXPLAIN  --只显示执行计划和执行结果

SET AUTOTRACE ON STATISTICS  --只显示执行的统计信息和执行结果

SET AUTOTRACE ON  --包含执行计划,统计信息和执行结果

SET AUTOTRACE TRACEONLY  --只显示执行计划
使用 SET AUTOTRACE ON EXPLAIN 时,显示执行结果,和执行计划,如图:

使用 SET AUTOTRACE ON STATISTICS 时,显示执行结果,和统计信息,如图:

使用 SET AUTOTRACE ON 时,显示执行结果,执行计划和统计信息,如图:

使用 SET AUTOTRACE TRACEONLY 时,显示执行计划和统计信息如图:

---------------------------------------------------------------------------------------------------------------------
优点

  1. 可以输出运行时的相关统计信息(产生多少逻辑读,多少次递归调用,多少次物理读的情况);

缺点

  1. 获取的不是真实的执行计划
  2. 无法看到表被访问了多少次。

---------------------------------------------------------------------------------------------------------------------
3.使用 gather_plan_statistics 获取高级执行计划

--方法1
alter session set statistics_level=all ; sql; select * from table(dbms_xplan.display_cursor(null,null,'allstats last')); --方法2
sql;(sql中加 HINT (gather_plan_statistics)) select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));

如图:

---------------------------------------------------------------------------------------------------------------------

优点

  1. 真实的执行计划
  2. 能看到表被扫描的次数
  3. 能看到oracle预测行数和真实返回的行数
  4. 可以看到逻辑读数

缺点

  1. 必须等sql真实执行过才能看到执行计划
  2. 没有统计信息

---------------------------------------------------------------------------------------------------------------------

4.使用10046事件来获取执行计划

alter session set events '10046 trace name context  forever,level 12';

SELECT *  FROM t1, t2 WHERE t1.id = t2.t1_id   AND t1.n IN (18, 19);

alter session set events '10046 trace name context off';  

select d.value
|| '/'
|| LOWER (RTRIM(i.INSTANCE, CHR(0)))
|| '_ora_'
|| p.spid
|| '.trc' trace_file_name
from (select p.spid
from v$mystat m,v$session s, v$process p
where m.statistic#=1 and s.sid=m.sid and p.addr=s.paddr) p,
(select t.INSTANCE
FROM v$thread t,v$parameter v
WHERE v.name='thread'
AND(v.VALUE=0 OR t.thread#=to_number(v.value))) i,
(select value
from v$parameter
where name='user_dump_dest') d; exit tkprof 源trc文件路径 格式化后路径 格式化参数

oracle 执行计划的获取方法的更多相关文章

  1. 查看Oracle执行计划的几种方法

    查看Oracle执行计划的几种方法 一.通过PL/SQL Dev工具 1.直接File->New->Explain Plan Window,在窗口中执行sql可以查看计划结果.其中,Cos ...

  2. 看懂Oracle执行计划

    最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问 ...

  3. 转:Oracle 执行计划(Explain Plan) 说明

    Oracle 执行计划(Explain Plan) 说明 原贴地址:http://blog.csdn.net/tianlesoftware/article/details/5827245   如果要分 ...

  4. [转]看懂Oracle执行计划

    原文地址:https://www.cnblogs.com/Dreamer-1/p/6076440.html 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径 ...

  5. 看懂Oracle执行计划、表连接方式

    看懂Oracle执行计划  原文:https://www.cnblogs.com/Dreamer-1/p/6076440.html 最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也 ...

  6. 02 看懂Oracle执行计划

    看懂Oracle执行计划   最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing… 一:什么是Oracle执行计划? 执行计划是一条查询语句在 ...

  7. oracle执行计划(转载)

    转载自 https://www.cnblogs.com/Dreamer-1/p/6076440.html 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的 ...

  8. Oracle调优之看懂Oracle执行计划

    @ 目录 1.文章写作前言简介 2.什么是执行计划? 3.怎么查看执行计划? 4.查看真实执行计划 5.看懂Oracle执行计划 5.1 查看explain 5.2 explain执行顺序 5.3 访 ...

  9. (Oracle)看懂Oracle执行计划(转载)

    最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问 ...

随机推荐

  1. 计算机网络-3-2-点对点协议PPP

    点对点协议PPP 在通信链路较差的年代,在数据链路层使用可靠传输协议曾经是一种好方法,比较简单的点对点PPP协议则是目前使用最广泛的数据链路层协议. PPP协议的特点 互联网用户通过都要连接到某个IS ...

  2. 线程创建,属性设置与获得,等待线程结束,线程中fork,以及执行exec()

    这篇博客的形式我想以分析代码不同情况为主: 点击(此处)折叠或打开 #include<stdio.h> #include<pthread.h> #include<time ...

  3. Maven打包web项目报错:webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update)

    问题描述 使用Maven打包项目的时候,出现错误: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing ...

  4. 关于Python中用户输入字符串(与变量名相同)无法作为变量名引用的理解以及解决方案

    在用户登录账号时,我需要在字典中查找是否存在其账号名称以及密码是否正确. 所以,我想将用户输入的账号赋值给变量,在字典中查找是否有此指值. 代码如下: 1 Ya = {'姓名': 'Ya', 'pas ...

  5. Java学习(十三)

    今天学习了Java中的继承,Java的继承和c++的差别很大. 继承的基本作用是代码复用,但最重要的作用是为了以后的"方法覆盖"和"多态机制". 继承的语法是: ...

  6. Python知识整理(一)

    一.Python交互模式(终端上进行) python # 进入到Python交互模式,提示符是 >>> exit() # 退出Python交互模式 python xxx.py # 执 ...

  7. <C#任务导引教程>练习三

    /*Convert.ToInt("213165");int a=12345;string sn=a.ToString();//把a转换成字符串snint b=int.Parse(s ...

  8. VC练习一

    1 #include<windows.h> 2 #include<stdio.h> 3 LRESULT CALLBACK WinSunProc(HWND hwnd,UINT u ...

  9. JDK源码阅读(7):ConcurrentHashMap类阅读笔记

    ConcurrentHashMap public class ConcurrentHashMap<K,V> extends AbstractMap<K,V> implement ...

  10. jvm的小练习

    代码如下: public static void main(String[] args) { byte[] array= new byte[1024*1024]; array=new byte[102 ...