Oracle执行计划。RBO优化器和CBO优化器。TABLE ACCESS FULL,TABLE ACCESS BY INDEX ROWID,TABLE ACCESS BY INDEX SCAN
文章目录
- 通过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.
索引扫描其实分为两步
扫描索引得到对应的ROWID.
通过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相关推荐
- ORACLE执行计划的一些基本概念
本文介绍了ORACLE执行计划的一些基本概念,供学习应用. 一.相关的概念 Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的.对每个表都有一个rowi ...
- [转]Oracle执行计划的相关概念
[转]Oracle执行计划的相关概念 本文介绍了ORACLE执行计划的一些基本概念,供学习应用. 一.相关的概念 Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统 ...
- oracle执行计划的rows不对,Oracle执行计划——all_rows和first_rows(n)优化器模式
Oracle执行计划--all_rows和first_rows(n)优化器模式 0. 环境创建 [sql] SQL> create usertest identified by test 2 d ...
- Oracle执行计划filter下多个节点的优化
Oracle执行计划filter下多个节点的优化 FILTER操作是执行计划中常见的操作,这种操作有两种情况: l 只有一个子节点,那么就是简单过滤操作. l有多个子节点,那么就是类似NESTED L ...
- 看懂Oracle执行计划(转载)
转载自 写的很好,屯一波 最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Or ...
- oracle执行计划耗费 基数 字节,Oracle 查看执行计划
一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二:怎样查看Oracle执行计划? 这里以PLSQL为例: ①:配置执行计划需要显示的项: 工具 ...
- mysql cbo优化器_Oracle的优化器(Optimizer) (CBO优化) 分享
Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执行 计划去执行.分析语句的执行计划的工作是由优化器(Optimiz Oracle的优化器(Optimizer) (CBO优化) ...
- Oracle总结(一):Oracle执行计划
看懂Oracle执行计划 最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 1.什么是Oracle执行计划? 执行计划是一条查询语句在Or ...
- 海天 oracle,Oracle执行计划详解
作者:TTTBLOG --- 简介: 本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容. 并有总结和概述,便于理解与记忆! +++ 目录 --- 一.相关的概念 ...
- oracle执行计划分析(转载)
2019独角兽企业重金招聘Python工程师标准>>> (转载,原文地址:http://blog.itpub.net/24478467/viewspace-705754/) 简介: ...
最新文章
- Zynq ROM 加载Mode 图表
- python3实现字符串的全排列的方法(无重复字符)
- tcpdump 识别成dns_dns tcpdump
- 关于优酷开放SDK之setOnVideoSizeChangedListener
- TCP/IP协议与UDP协议的区别
- 对C#中的Close()和Dispose()的浅析
- cvpr2020 人脸检测与识别_Python人脸检测识别实例教程
- mt4双线macd_指标小课堂|学院首创!独家手机MT4双线MACD指标设置教程
- batchplot插件用法_batchplot批量打印怎么用?Batchplot(CAD批量打印工具)安装步骤
- iOS Zip文件解压
- ps换脸教程:ps换脸教程步骤具体,怎样选择复制层
- 机器人开发--二维激光SLAM介绍
- MacBook Pro 上网很慢
- 如何获取filecoin_分析:如何捕获Filecoin的价值?
- 如何使用命令查看计算机sid,Sid 命令
- 湘西纪行 芷江 芋头侗寨 通道 黔阳 高椅村
- NOIP2020微信步数
- vue中使用bootstrap4踩坑之旅
- 【蓝桥杯省赛】冲刺练习题【枚举】倒计时【12】天
- Mutation Observer API