oracle解释&执行计划

解释计划

语句EXPLAIN PLAN用来显示优化器为SQL语句所选择的执行计划。需要说明的是当你得到了解释计划输出的时候,你其实是得到了当SQL语句执行的时候应该采用的预期执行计划。你并没有得到实际的执行计划以及与其相关的数据源执行统计信息。你所得到的只是估计值,而不是实际值。将估计的信息称为解释计划输出 ,而把实际信息称为执行计划输出 来区分实际和预期的执行计划。

www.2cto.com

解释计划例子:

Sql代码

SQL> explain plan for

2  select * from small_customers;

Explained

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

PLAN_TABLE_OUTPUT

——————————————————————————–

Plan hash value: 1819012793

——————————————————————————–

| Id  | Operation         | Name            | Rows  | Bytes | Cost (%CPU)| Time

——————————————————————————–

|   0 | SELECT STATEMENT  |                 |     6 |   156 |     3   (0)| 00:00

|   1 |  TABLE ACCESS FULL| SMALL_CUSTOMERS |     6 |   156 |     3   (0)| 00:00

——————————————————————————–

Note

—–

– dynamic sampling used for this statement

12 rows selected

www.2cto.com

缩进格式:

Sql代码

select id, parent_id, operation

from (select level lvl,

id,

parent_id,

lpad(‘ ‘, level) || operation || ‘ ‘ || options || ‘ ‘ ||

object_name as operation

from plan_table

start with id = 0

connect by prior id = parent_id)

order by lvl desc, id;

解释计划输出最令人郁闷的地方就是它与语句实际执行时所使用的计划可能是不一致的。使用解释计划的时候以下3点可能导致计划输出与实际执行计划不一致的地方:

解释计划是基于你使用它的时候的环境来生成的

解释计划不考虑绑定变量的数据类型(所有的绑定变量都是VARCHAR2的)

解释计划不”窥视”绑定变量的值

对于解释计划来说,数据类型都被认为是一样的(都是字符串)。然而,当语句真正执行的时候所准备的执行计划却要考虑数据类型,ORACLE隐式地将字符串数据类型转换为数值类型来匹配绑定变量的数据类型。

www.2cto.com

如何学会阅读计划:

学会识别和分割父子组

掌握计划中运算执行的顺序

学会以途述的形式来阅读计划

按照执行顺序显示的计划运算:

Sql代码

explain plan for select * from test_1;

select * from table(dbms_xplan.display);

select id, parent_id, operation

from (select level lvl,

id,

parent_id,

lpad(‘ ‘, level) || operation || ‘ ‘ || options || ‘ ‘ ||

object_name as operation

from plan_table

start with id = 0

connect by prior id = parent_id)

order by lvl desc, id;

执行计划  www.2cto.com

当一条SQL语句执行的时候将会生成该语句的实际执行计划。在语句被硬解析之后,所选的执行计划会被存到库高速缓存中以便以后重用。可以通过查询V$SQL_PLAN来查看计划运算。

Sql代码

select sql_id from v$sql where sql_text like ‘%TEST%’;

select * from v$sql_plan where sql_id=’7dfcmhhhxjspn’  and child_number=0;

或者用以下语句来代替v$sql_plan

select * from table(dbms_xplan.display_cursor(‘7dfcmhhhxjspn’,null,’ALLSTATS LAST’));

www.2cto.com

也可以通过一条语句:

SELECT * FROM TEST;

SELECT XPLAN.*

FROM (SELECT MAX(SQL_ID) KEEP(DENSE_RANK LAST ORDER BY LAST_ACTIVE_TIME) SQL_ID,

MAX(CHILD_NUMBER) KEEP(DENSE_RANK LAST ORDER BY LAST_ACTIVE_TIME) CHILD_NUMBER

FROM V$SQL

WHERE UPPER(SQL_TEXT) LIKE ‘%SELECT * FROM TEST%’

AND UPPER(SQL_TEXT) NOT LIKE

‘%FROM V$SQL WHERE UPPER(SQL_TEXT) LIKE %’) SQLINFO,

TABLE(DBMS_XPLAN.display_cursor(SQLINFO.SQL_ID,

SQLINFO.CHILD_NUMBER,

‘ALLSTATS LAST’)) XPLAN;

oracle的解释计划,oracle解释执行计划-Oracle相关推荐

  1. t-sql执行结果_解释T-SQL查询的执行计划

    t-sql执行结果 In this article, we will analyze a simple T-SQL query execution plan with different aspect ...

  2. 为什么预估执行计划与真实执行计划会有差异?

    云和恩墨北区技术工程师 专注于 SQL 审核和优化相关工作.曾经服务的客户涉及金融保险.电信运营商.政府.生产制造等行业. 郭成日 本文由恩墨大讲堂154期线上分享整理而成. 一问题概要 对同一个 S ...

  3. mysql 执行计划大于_Mysql执行计划(大章)

    Mysql的执行计划 执行计划是啥? 使用explain关键字可以模拟优化器执行SQL查询语句,从而知道Mysql是如何处理你的SQL语句的.分析你的查询语句或者表结构的性能瓶颈 语法 explain ...

  4. Oracle学习笔记(三)----------执行计划

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

  5. Oracle AWR 阙值影响历史执行计划

    最近有网友提到为什么在dba_hist_sql_plan中无法查看到sql语句的历史执行计划,对于这个问题是由于缺省情况下,Oracle 设定的阙值并非捕获所有的sql语句,所以无法看到某些sql历史 ...

  6. SQL Server、Oracle 如何清除指定SQL的执行计划

    一. SQL Server 1. 存储过程 如果是存储过程,可以使用sp_recompile指定存储过程名重新编译. 注意如果里面的参数是表名,那么所有用到该表的存储过程和trigger都会重新编译, ...

  7. oracle强制执行计划,Oracle里另外一些典型的执行计划

    在之前的文章里写了Oracle里常见的执行计划,可以参考文章:http://hbxztc.blog.51cto.com/1587495/1901416,这篇文章里介绍的是其他的一些典型的执行计划. 1 ...

  8. oracle exist 10053,Oracle中利用10053事件来分析Oracle是如何做出最终的执行计划

    我们都知道Oracle从10g开始SQL语句选择什么样的执行方式,是全表扫描,还是走索引的依据是执行代价.那么我们怎么可以去看执行代价的信息呢?通过10053事件可以Oracle依据的执行代价和如何做 ...

  9. mysql和oracle执行计划_mysql explain执行计划详解

    原文链接:https://www.cnblogs.com/xiaoboluo768/p/5400990.html mysql> explain  select t1.kprq from    p ...

  10. mysql 执行计划 优化_执行计划

    #### 概念 一个sql语句在没有执行(运行)之前,先计算一下该sql语句需要调用的相关资源,再决定该sql语句是否要最终执行,该行为被称为"执行计划". #### 作用 主要用 ...

最新文章

  1. 秋色园QBlog技术原理解析:Web之页面处理-内容填充(八)
  2. ubuntu 修改ip
  3. srping atomikos 的jta 事物管理
  4. OpenCV 开闭运算
  5. 庖丁解牛ASP.NET3.5控件和组件开发技术-(1)服务器控件概述
  6. Linux 内核维护缺后浪,前浪Linus缺点Fun
  7. 【Spring】模块
  8. (16):Silverlight 2 数据与通信之JSON
  9. 【jQuery笔记Part4】03-事件详解
  10. Ubuntu16.04下修复宿主机时区错位8小时、修复容器相较于宿主机错位8小时问题
  11. 中华黑豹计算机病毒,关于中华黑豹病毒...-爱毒霸交流论坛
  12. R语言︱线性混合模型理论与案例探究(固定效应随机效应)
  13. IT 软件开发最常用英语单词总汇
  14. namespace is terminated
  15. 如何停止keepalived_systemctl无法停掉keepalived
  16. python十六进制转换成二进制_python - 将十六进制转换为二进制
  17. spring——Spring自动装配——示例
  18. 日媒感慨中国手机发展,超乎日本人想象!
  19. 51单片机学习笔记之KEIL5的安装与破解
  20. 信号时域分析方法的理解(峰值因子、脉冲因子、裕度因子、峭度因子、波形因子和偏度等)

热门文章

  1. SeaChest Utilities 工具,让你的硬盘功耗又低又长寿
  2. 如何识别服务器网站有病毒,网站有病毒怎么解决?
  3. WordPress主题 LightSNS v1.6.60 强大的社交系统SNS主题(免受权)
  4. 【软件安装】TeXLive 2022安装(Latex下载,安装,测试,升级)教程
  5. [UE]EpicGames Launcher 添加/识别本地已有编辑器版本
  6. python开发平台介绍_【Python 入门】简介与搭建开发环境
  7. AfterEffects 不支持 MKV 格式的解决办法
  8. 系统集成项目管理工程师10大管理47个过程域输入输出工具(项目成本管理)
  9. NOI题库1.1-1.10答案
  10. ubuntu里面控制器放大缩小屏幕