访问数据的方法:一、访问表的方法:1.全表扫描,2.ROWID扫描

二、访问索引的方法:1.索引唯一性扫描,2.索引范围扫描,3.索引全扫描,4.索引快速全扫描,5.索引跳跃式扫描

表连接:1.排序合并连接,2.嵌套循环连接,3.哈希连接,4.反连接,5.半连接,6.星型连接(多用于数据仓库,是一种单个事实表和多个维度表之间的连接,事实表和维度表之间是基于事实表的外键列和对应维度表的主键之间的连接)

执行计划:

方式一、explain plan

SQL> explain plan for select empno,ename,dname from scott.emp,scott.dept where emp.deptno = dept.deptno;

Explained

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

方式二、DBMS_XPLAN 包

针对不同的场景,可以选择四种不同的方法中的一种:

1.select * from table(dbms_xplan.display)

这需要和explain plan 配合使用,上面已经展示

2.select * from table(dbms_xplan.display_cursor(null,null,'advanced'))

用于在sqlplus中查看刚刚执行过的sql的执行计划,第三个参数还可为all,只是第三个参数是advanced结果会更详细

3.select * from table(dbms_xplan.display_cursor('sql_id/hash_value',child_cursor_number,'advanced'))

用于查看指定sql的执行计划,sql_id/hash_value和child_cursor_number可从v$sql视图中找到:

select sql_text,sql_id,hash_value,child_number from v$sql where sql_text like 'SQL';

只要目标SQL的执行计划所在的Child Cursor还么有被age out出Share Pool,就可以使用此方法。

4.select * from table(dbms_xplan.display_awr('sql_id'))

用于查看指定sql的所有历史执行计划。 方法2和3能够显示目标SQL执行计划的前提条件是该SQL还在Share Pool中,如果已经被age out出Share Pool,那么只要该SQL的执行计划被Oracle采集到AWR Repository中,我们就可以使用方法4来查看该SQL的所有执行计划。

select sql_text,sql_id,version_count,executions from v$sqlarea where sql_text like 'SQL';

version_count可以看出该SQL有几个Child Cursor。

和方法2和3相比,有个不好的地方是看不到执行步骤对应的谓词条件

方法三、AUTOTRACE开关

在sqlplus中将AUTOTRACE开关打开也能得到目标sql的执行计划,还能额外观察到目标SQL执行所消耗的物理读、逻辑读、产生redo的数量以及排序的数量。

SET AUTOTRACE {OFF|ON|TRACEONLY}

[EXPLAIN]

[STATISTICS]

SESSION默认是SET AUTOTRACE OFF

1.在当前SESSION中执行SET AUTOTRACE ON 可以在当前session中打开AUTOTRACE开关,这样,这个SESSION中随后执行的所有SQL除了显示SQL执行结果之外,还会额外显示SQL所对应的执行计划和资源消耗情况。

2.在当前SESSION中执行SET AUTOTRACE TRACEONLY,可以在当前SESSION中只显示SQL执行计划和额外消耗,而不显示结果。

3.在当前SESSION中执行SET AUTOTRACE TRACEONLY EXPLAIN可以在当前SESSION中只显示执行计划(SELECT不会被实际执行,DML语句会被实际执行)

4.在当前SESSION中执行SET AUTOTRACE TRACEONLYSTATISTICS可以在当前SESSION中只显示资源消耗

方法四、10046事件与tkprof命令

10046事件与上面三种的不同之处在于,所得到的执行计划中明确显示了目标SQL实行执行计划中每一个执行步骤所消耗的逻辑读、物理读和花费时间。

< 略 >

除了第四种方法外,前三种的方法得到的执行计划有可能是不准确的,要判断执行计划是否准确,就是看目标SQL是否真正被执行过,真正被实际执行过的SQL得到的执行计划准确。(此原则不适用于AUTOTRACE开关,因为所有使用AUTOTRACE开关所显示的执行计划都有可能是不准确的,即使对应的目标SQL已经被执行过,因为使用SET AUTOTRACE命令所显示的执行计划来源都是调用explain plan命令)

第一种方法得到的执行计划,目标SQL是没有被被实际执行过的,执行计划可能是不准确的尤其是目标SQL包含绑定变量时。

第二种方法的 2,3,4 得到的执行计划是准确的,因为此时目标SQL已经被实际执行过。

cuihua查看真实执行计划的脚本用法

9i: @'e:\xxx' sql_id child_cursor_number  --适合于9i之前数据库

printsql: 在数据库服务器上执行 topas命令后显示 SPID为1234的Oracle进程占用了14%CPU,查看这进程在做什么:

exec printsql(1234,'SPID')

printsql可帮把这个进程正在执行的SQL,该SQL真实的执行计划以及杀这个Session的语句打印出来

查看执行计划顺序口诀:先从最开头一直连续往右看,直到看到最右边的并列的地方;对于不并列的,靠右的先执行;如果见到并列的,就从上往下看,对于并列的部分,考上的先执行。

cuihua 查看执行顺序的脚本

xplan包

select * from table(xplan.display_cursor('sql_id',child_number,'advanced'));

oracle函数lp,Oracle 执行计划的查看方式相关推荐

  1. 【DB笔试面试597】在Oracle中,获取执行计划有哪几种方法?

    ♣题目部分 在Oracle中,获取执行计划有哪几种方法? ♣答案部分 一般来说,有如下几种获取执行计划的方式: 1.AUTOTRACE方式 AUTOTRACE是Oracle自带的客户端工具SQL*Pl ...

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

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

  3. 【Oracle】看懂执行计划之基于成本的优化器(CBO)

    [Oracle]看懂执行计划之基于成本的优化器(CBO) 基于代价的优化方式   Cost-Based Optimization,简称 CBO.CBO 选择目标 SQL 执行计划的判断原则是成本,从目 ...

  4. 【Oracle】看懂执行计划之基于规则的优化器(RBO)

    [Oracle]看懂执行计划之基于规则的优化器(RBO) 简介   基于规则的优化器(RBO)是通过编码在 Oracle 数据库中的一系列固定的规则,来决定目标 SQL 的执行计划.Oracle 事先 ...

  5. MySql执行计划的查看

    一.什么是数据库执行计划:       利用一个SQL语句, 你可能要Server取出所有News表中的信息. 当Server收到的这条SQL的时候, 第一件事情并不是解析它. 如果这条SQL没有语法 ...

  6. 简单介绍oracle执行计划,Oracle性能优化之oracle中常见的执行计划及其简单解释

    一.访问表执行计划 1.table access full:全表扫描.它会访问表中的每一条记录(读取高水位线以内的每一个数据块). 2.table access by user rowid:输入源ro ...

  7. oracle更新统计信息执行计划,为准确生成执行计划更新统计信息-analyze与dbms_stats...

    如果我们想让CBO利用合理利用数据的统计信息,正确判断执行任何SQL查询时的最快途径,需要及时的使用analyze命令或者dbms_stats重新统计数据的统计信息. 例如索引跳跃式扫描(INDEX ...

  8. oracle 数据执行计划,Oracle里常见的执行计划

    本文介绍了Oracle数据库里常见的执行计划,使用的Oracle数据库版本为11.2.0.1. 1.与表访问相关的执行计划 Oracle数据库里与表访问有关的两种方法:全表扫描和ROWID扫描.反映在 ...

  9. 使用oracle sql profile固定执行计划

      2013-02-05 16:19:36 标签:oracle sql profile 版权声明:原创作品,如需转载,请与作者联系.否则将追究法律责任. 使用sql profile固定执行计划实验 1 ...

最新文章

  1. php接收表单图片,如何在PHP中获取表单图片数据
  2. java 基本的数据类型_Java的基本数据类型介绍
  3. Android架构师亲述:我从某度外包到字节,你知道我经历了什么吗?
  4. 计算机网络之数据链路层思维导图总结
  5. C#编译器优化那点事
  6. ihtml2document能不能根据id获取dom_一段监视 DOM 的神奇代码
  7. 国际空间站20年花掉超千亿美金,一些人开始觉得它“没啥用”了
  8. 《Pytorch - CNN模型》
  9. java弱引用在安卓中有效吗_Android 软引用和弱引用详解及实例代码
  10. Leetcode每日一题:剑指offer22.lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof(链表中倒数第k个节点)
  11. SwitchHost切换本地Host一键切换开发环境
  12. php 连接 sybase,thinkphp连接sybase数据库
  13. oracle中那个日期怎么相减_oracle日期相减
  14. 高程数据下载——DLR_SRTM_说明
  15. 转--关于引擎优化的相关资料
  16. 16个Javascript的Web UI库、框架及工具包
  17. Entrust Datacard新一代再转印证卡打印机系列喜获蓝盾杯创新奖
  18. LT2611UXC-LVDS转HDMI2.0转换芯片
  19. 庄懂的TA笔记(六)<FakeEnvReflect 生锈,锈迹效果>
  20. Python实现检测文件的MD5值来查找重复文件

热门文章

  1. python观察日志(part25)--创建numpy数组
  2. CSS基础(part17)--vertical-align垂直对齐
  3. Django从理论到实战(part30)--Meta配置
  4. cnn 句向量_深度学习目标检测Fast R-CNN论文解读
  5. SAP 电商云 Spartacus UI Checkout 页面的三个 page guards
  6. SAP Spartacus 标准的 Effects 实现的注入原理
  7. 把 SAP UI5 应用部署到 SAP Kyma
  8. SAP Cloud Application Programming CatalogService 默认的路径
  9. rxjs operator学习笔记
  10. SAP WebClient UI开发工具中attribute文件夹展开的实现原理分析