文章目录

  • 通过PL/SQL Developer查看查询的执行计划
  • 1. 什么是执行计划
  • 2. 配置执行计划需要显示的项
  • 3执行计划的常用列字段解释
  • 4. 使用执行计划
  • 5. 查看执行计划
    • 5.1 执行顺序:
    • 5.2 访问表的几种方式(非全部)
    • 5.3 TABLE ACCESS FULL (全表扫描)
    • 5.4 TABLE ACCESS BY INDEX ROWID ( 通过ROWID的表存取)
    • 5.5 TABLE ACCESS BY INDEX SCAN (索引扫描)
  • 6. Oracle的优化器

通过PL/SQL Developer查看查询的执行计划

1. 什么是执行计划

执行计划就是一条查询语句在Oracle中的执行过程或访问路径的描述。

2. 配置执行计划需要显示的项

3执行计划的常用列字段解释

  • 基数(Cardinality) : Oracle 估计的当前操作的返回结果集行数
  • 字节(Bytes) :执行该步骤后返回的字节数.
  • 耗费(COST)、CPU耗费: Oracle 估计的该步骤的执行成本,用于说明SQL执行的代价,理论上越小越好(该值可能与实际有出入)
  • 时间(Time) : Oracle 估计的当前操作所需的时间:

最主要的还是查看耗费,用于SQL优化

4. 使用执行计划

通过工具启动执行计划。选中需要查看执行计划的查询语句,在工具栏中选择

Tools----->Explain Plan

或者是选择需要查看执行计划的sql语句按下F5。

5. 查看执行计划

5.1 执行顺序:

缩进最多的先执行:(缩进相同时,最上面的先执行)

5.2 访问表的几种方式(非全部)

  • TABLE ACCESS FULL (全表扫描)
  • TABLE ACCESS BY INDEX ROWID (通过ROWID的表存取)
  • TABLE ACCESS BY INDEX SCAN (索引扫描)

5.3 TABLE ACCESS FULL (全表扫描)

Oracle会读取表中所有的行,并检查每一行是否满足SQL语句中的Where限制条件;使用建议:数据量太大的表不建议使用全表扫描,除非本身需要取出的数据较多,占到表数据总量的5%~10%或以上

5.4 TABLE ACCESS BY INDEX ROWID ( 通过ROWID的表存取)

什么是ROWID?

ROWD是由Oracle自动加在表中每行最后的一列伪列,既然是伪列,就说明表中并不会物理存储ROWID的值。

你可以像使用其它列一样使用它,只是不能对该列的值进行增、删、改操作。

一旦一行数据插入后,则其对应的ROWID在该行的生命周期内是唯一的, 即使发生行迁移,该行的ROWID值也不变。

TABLE ACCESS BY INDEX ROWID

行的ROWID指出了该行所在的数据文件、数据块以及行在该块中的位置,所以通过ROWID可以快速定位到目标数据上,这也是Oracle中存取单行数据最快的方法;

5.5 TABLE ACCESS BY INDEX SCAN (索引扫描)

在索引块中,既存储每个素引的键值,也存储具有该键值的行的ROWID.

索引扫描其实分为两步

  1. 扫描索引得到对应的ROWID.

  2. 通过ROWID定位到具体的行读取数据。

五种索引扫描

  • INDEX UNIQUE SCAN (索引唯一扫描)
  • INDEX RANGE SCAN (索引范围扫描)
  • INDEX FULL SCAN (索引全扫描)
  • INDEX FAST FULL SCAN (索引快速扫描)
  • INDEX SKIP SCAN (索引跳跃扫描)

INDEX UNIQUE SCAN (索引唯一扫描)

针对唯一性索引(UNIQUE INDEX)的扫描,每次至多只返回一条记录;

表中某字段存在UNIQUE、PRIMARYKEY约束时,Oracle 常实现唯一性扫描 ;

INDEX RANGE SCAN (索引范围扫描)

使用一个索引存取多行数据;

发生索引范围扫描的三种情况:

1.在唯一索引列上使用了范围操作符(如: >, < ,<>, >=, <= ,between) ;

2.在组合索引上,只使用部分列进行查询(查询时必须包含前导列,否则会走全表扫描);

3对非唯一索引列上进行的任何查询;

INDEX FULL SCAN (索引全扫描)

进行全索引扫描时,查询出的数据都必须从索引中可以直接得到;

INDEX FAST FULL SCAN (索引快速扫描)

扫描索引中的所有的数据块,与NDEX FULL SCAN类似,但是一个显著的区别是它不对查询出的数据进行排序( 即数据不是以排序顺序被返回) ;

INDEX SKIP SCAN (索引跳跃扫描)

表有一个复合索引,且在查询时有除了前导列(索引中第一列)外的其他列作为条件;

6. Oracle的优化器

Oracle的优化器种类

  • RBO (RuleBased Optimization)基于规则的优化器
  • CBO (Cost-Based Optimization)基于代价的优化器

RBO优化器

RBO有严格的使用规则,只要按照这套规则去写SQL语句,无论数据表中的内容怎样,也不会影响到你的执行计划。换句话说,RBO对数据“不敏感”,它要求SQL编写人员必须要了解各项细则。RBO一直沿用至ORACLE 9i,从ORACLE 10g开始,RBO已经彻底被抛弃。

CB0优化器

CBO是一种比RBO更加合理、可靠的优化器,在ORACLE 10g中完全取代RBO,CBO通过计算各种可能的执行计划的“代价”,即COST,从中选用COST最低的执行方案作为实际运行方案。

Oracle执行计划。RBO优化器和CBO优化器。TABLE ACCESS FULL,TABLE ACCESS BY INDEX ROWID,TABLE ACCESS BY INDEX SCAN相关推荐

  1. ORACLE执行计划的一些基本概念

    本文介绍了ORACLE执行计划的一些基本概念,供学习应用. 一.相关的概念 Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的.对每个表都有一个rowi ...

  2. [转]Oracle执行计划的相关概念

    [转]Oracle执行计划的相关概念 本文介绍了ORACLE执行计划的一些基本概念,供学习应用. 一.相关的概念 Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统 ...

  3. oracle执行计划的rows不对,Oracle执行计划——all_rows和first_rows(n)优化器模式

    Oracle执行计划--all_rows和first_rows(n)优化器模式 0. 环境创建 [sql] SQL> create usertest identified by test 2 d ...

  4. Oracle执行计划filter下多个节点的优化

    Oracle执行计划filter下多个节点的优化 FILTER操作是执行计划中常见的操作,这种操作有两种情况: l 只有一个子节点,那么就是简单过滤操作. l有多个子节点,那么就是类似NESTED L ...

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

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

  6. oracle执行计划耗费 基数 字节,Oracle 查看执行计划

    一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二:怎样查看Oracle执行计划? 这里以PLSQL为例: ①:配置执行计划需要显示的项: 工具  ...

  7. mysql cbo优化器_Oracle的优化器(Optimizer) (CBO优化) 分享

    Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执行 计划去执行.分析语句的执行计划的工作是由优化器(Optimiz Oracle的优化器(Optimizer) (CBO优化) ...

  8. Oracle总结(一):Oracle执行计划

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

  9. 海天 oracle,Oracle执行计划详解

    作者:TTTBLOG --- 简介: 本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容. 并有总结和概述,便于理解与记忆! +++ 目录 --- 一.相关的概念 ...

  10. oracle执行计划分析(转载)

    2019独角兽企业重金招聘Python工程师标准>>> (转载,原文地址:http://blog.itpub.net/24478467/viewspace-705754/) 简介: ...

最新文章

  1. Zynq ROM 加载Mode 图表
  2. python3实现字符串的全排列的方法(无重复字符)
  3. tcpdump 识别成dns_dns tcpdump
  4. 关于优酷开放SDK之setOnVideoSizeChangedListener
  5. TCP/IP协议与UDP协议的区别
  6. 对C#中的Close()和Dispose()的浅析
  7. cvpr2020 人脸检测与识别_Python人脸检测识别实例教程
  8. mt4双线macd_指标小课堂|学院首创!独家手机MT4双线MACD指标设置教程
  9. batchplot插件用法_batchplot批量打印怎么用?Batchplot(CAD批量打印工具)安装步骤
  10. iOS Zip文件解压
  11. ps换脸教程:ps换脸教程步骤具体,怎样选择复制层
  12. 机器人开发--二维激光SLAM介绍
  13. MacBook Pro 上网很慢
  14. 如何获取filecoin_分析:如何捕获Filecoin的价值?
  15. 如何使用命令查看计算机sid,Sid 命令
  16. 湘西纪行 芷江 芋头侗寨 通道 黔阳 高椅村
  17. NOIP2020微信步数
  18. vue中使用bootstrap4踩坑之旅
  19. 【蓝桥杯省赛】冲刺练习题【枚举】倒计时【12】天
  20. Mutation Observer API

热门文章

  1. C# SaveFileDialog 的用法
  2. ST-Link资料05_自制ST-Link(提供原理图及hex和bin固件)
  3. 智慧社区管理系统助力实现社区数字化管理
  4. 985北京航空航天大学软件考研改考!数据结构+软件工程+操作系统
  5. MSIL 教程(一)
  6. 无向图的最大团/最大独立集 算法总结
  7. Android中间人攻击测试工具(原创) – Lanmitm
  8. 二、Mingw下载安装
  9. MinGW下载与安装配置
  10. 【计算机组成原理】4.2 拓展操作码指令格式