PL/SQL Developer 查看查询的执行计划
https://zhuanlan.zhihu.com/p/65771352
通过 PL/SQL Developer 查看查询的执行计划
1 什么是执行计划
执行计划是一条查询语句在 Oracle 中的执行过程或访问路径的描述。2 配置执行计划需要显示的项
2 配置执行计划需要显示的项
3 执行计划的常用列字段解释
基数(Cardinality):Oracle 估计的当前操作的返回结果集行数
字节(Bytes):执行该步骤后返回的字节数
耗费(COST)、CPU 耗费:Oracle 估计的该步骤的执行成本,用于说明 SQL 执行的
代价,理论上越小越好(该值可能与实际有出入)
时间(Time):Oracle 估计的当前操作所需的时间:
4 使用执行计划
通过工具启动执行计划。选中需要查看执行计划的查询语句,在工具栏中选择Explain Plan
或者是选择需要查看执行计划的查询语句后按 F5。
5 查看执行计划
5.1执行顺序
缩进最多的最先执行;(缩进相同时,最上面的最先执行)。
5.2表访问的几种方式(非全部):
• TABLE ACCESS FULL(全表扫描)
• TABLE ACCESS BY INDEX ROWID(通过 ROWID 的表存取)
• TABLE ACCESS BY INDEX SCAN(索引扫描)
5.2.1TABLE ACCESS FULL(全表扫描)
Oracle 会读取表中所有的行,并检查每一行是否满足 SQL 语句中的 Where 限制条件;
使用建议:数据量太大的表不建议使用全表扫描,除非本身需要取出的数据较多,占到
表数据总量的 5% ~ 10% 或以上.2TABLE ACCESS BY INDEX ROWID(通过 ROWID 的
表存取)
5.2.2.1 什么是 ROWID
ROWID 是由 Oracle 自动加在表中每行最后的一列伪列,既然是伪列,就说明表中并不
会物理存储 ROWID 的值。
你可以像使用其它列一样使用它,只是不能对该列的值进行增、删、改操作。
一旦一行数据插入后,则其对应的 ROWID 在该行的生命周期内是唯一的,即使发生行
迁移,该行的 ROWID 值也不变。
5.2.2.2 TABLE ACCESS BY INDEX ROWID
行的 ROWID 指出了该行所在的数据文件、数据块以及行在该块中的位置,所以通过
ROWID 可以快速定位到目标数据上,这也是 Oracle 中存取单行数据最快的方法;
5.2.3TABLE ACCESS BY INDEX SCAN(索引扫描)
在索引块中,既存储每个索引的键值,也存储具有该键值的行的 ROWID。
5.2.3.1 索引扫描其实分为两步
1 扫描索引得到对应的 ROWID。
2 通过 ROWID 定位到具体的行读取数据。
5.2.3.2 五种索引扫描
• INDEX UNIQUE SCAN(索引唯一扫描)
• INDEX RANGE SCAN(索引范围扫描)
• INDEX FULL SCAN(索引全扫描)
• INDEX FAST FULL SCAN(索引快速扫描)
• INDEX SKIP SCAN(索引跳跃扫描)
5.2.3.2.1 INDEX UNIQUE SCAN(索引唯一扫描)
针对唯一性索引(UNIQUE INDEX)的扫描,每次至多只返回一条记录;
表中某字段存在 UNIQUE、PRIMARY KEY 约束时,Oracle 常实现唯一性扫描;
5.2.3.2.2INDEX RANGE SCAN(索引范围扫描)
使用一个索引存取多行数据;
发生索引范围扫描的三种情况:
1 在唯一索引列上使用了范围操作符(如:> < <> >= <= between);
2 在组合索引上,只使用部分列进行查询(查询时必须包含前导列,否则会走全表扫描);
3 对非唯一索引列上进行的任何查询;通过 PL/SQL Developer 查看查询的执行计划
1 什么是执行计划
执行计划是一条查询语句在 Oracle 中的执行过程或访问路径的描述。5.2.3.2.3INDEX FULL SCAN(索引全扫描)
进行全索引扫描时,查询出的数据都必须从索引中可以直接得到;
5.2.3.2.4INDEX FAST FULL SCAN(索引快速扫描)
扫描索引中的所有的数据块,与 INDEX FULL SCAN 类似,但是一个显著的区别是它
不对查询出的数据进行排序(即数据不是以排序顺序被返回);
5.2.3.2.5INDEX SKIP SCAN(索引跳跃扫描)
表有一个复合索引,且在查询时有除了前导列(索引中第一列)外的其他列作为条件;
5.2.4Oracle 的优化器
5.2.4.1 Oracle 的优化器种类
• RBO(Rule-Based Optimization) 基于规则的优化器
• CBO(Cost-Based Optimization) 基于代价的优化器
5.2.4.2 RBO 优化器
RBO 有严格的使用规则,只要按照这套规则去写 SQL 语句,无论数据表中的内容怎样,
也不会影响到你的执行计划。换句话说,RBO 对数据“不敏感”,它要求 SQL 编写人员必
须要了解各项细则。RBO 一直沿用至 ORACLE 9i,从 ORACLE 10g 开始,RBO 已经彻底
被抛弃。
5.2.4.3 CBO 优化器
CBO 是一种比 RBO 更加合理、可靠的优化器,在 ORACLE 10g 中完全取代 RBO。CBO
通过计算各种可能的执行计划的“代价”,即 COST,从中选用 COST 最低的执行方案作为实
际运行方案。
6 执行计划的使用
6.1单表
6.1.1分析查询表中的所有数据
6.1.1.1 示例
查询 employees 表中的所有数据.2分析主键作为条件的查询
6.1.2.1 示例
查询 employees 表中 employees_id 为 100 的雇员
6.1.3分析非主键列作为查询条件
6.1.3.1 示例
查询雇员名字为 Tarloy 的雇员.4分析 like 条件
6.1.4.1 示例
查询雇员名字中含有 a 的雇员
6.1.5分析非唯一性索引列作为条件的查询
6.1.5.1 示例一
将 last_name 创建索引
create index emp_name on
employees(last_name);
6.1.5.2 示例二
查询雇员名字为 Taylor 的雇员。
6.1.6分析非唯一性索引中=、>、< 、<>条件
6.1.6.1 示例一
对雇员薪水列做=、>、<、<>条件判断。
6.1.6.2 示例二
对薪水创建索引,使用薪水列做=、>、<、<>条件判断。
6.2多表
6.2.1内连接
6.2.1.1 示例一
使用等值连接,查询所有部门以及所有部门下的雇员。
6.2.1.2 示例二
使用子查询,查询所有部门以及所有部门下的雇员。
6.2.2外连接
6.2.2.1 示例一
查询所有雇员与雇员的部门名称,包含那些没有部门的雇员。
PL/SQL Developer 查看查询的执行计划的更多相关文章
- 如何使用PL/SQL Developer查看和杀掉session
http://jingyan.baidu.com/article/3ea51489eb65b152e61bba8b.html
- Oracle数据库PL/SQL Developer查询结果显示问号乱码的解决方法
PL SQL Developer,查询结果中的中文变成了一堆问号,SQL语句中的中文被提示invalid character,不能识别. 解决方法: 执行,select userenv('langua ...
- PL/SQL DEVELOPER执行计划的查看
这里,我学到的一个很重要的东西,就是用PL/SQL DEVELOPER去看一条SELECT语句的执行计划,执行计划里面可以看到这条SELECT语句的开销.I/O操作开销等数值,可以很清晰地看到语句各个 ...
- PL/SQL Developer 使用中文条件查询时无数据的解决方法
PL/SQL Developer 使用中文条件查询时无数据,这是由于字符集的不一致导致的. 执行以下sql命令:select userenv('language') from dual; 显示:SIM ...
- 如何查看正在执行sql的语句及其父语句调用?如何查看正在执行SQL的具体参数值与执行计划?
---SQL Server查询正在执行的SQL语句及执行计划 select ds.session_id,dr.start_time,db_name(dr.database_id),dr.blockin ...
- PL/SQL Developer 使用中文条件查询时无数据的解决方法(转)
原文地址: PL/SQL Developer 使用中文条件查询时无数据的解决方法 PL/SQL Developer 使用中文条件查询时无数据,这是由于字符集的不一致导致的. 执行以下sql命令:sel ...
- mysql,存储引擎,事务,锁,慢查询,执行计划分析,sql优化
基础篇:MySql架构与存储引擎 逻辑架构图: 连接层: mysql启动后(可以把mysql类比为一个后台的服务器),等待客户端请求,当请求到来后,mysql建立一个一个线程处理(线程池则分配一个空线 ...
- SQL Server如何查看存储过程的执行计划
有时候,我们需要查看存储过程的执行计划,那么我们有什么方式获取存储过程的历史执行计划或当前的执行计划呢? 下面总结一下获取存储过程的执行计划的方法. 1:我们可以通过下面脚本查看存储过程的执行计划,但 ...
- SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划
我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...
随机推荐
- 博客中引入了gitment评论系统
官方github地址:https://github.com/imsun/gitment 官方中文说明地址:https://imsun.net/posts/gitment-introduction/ 官 ...
- window 下总是object_detection/protos/*.proto: No such file or directory
这是因为目前的protoc3.5有Bug,换成3.4就好了https://github.com/google/protobuf/releases/tag/v3.4.0
- UICollectionView中的cell包含UIScrollview
需求:在scrollview的子View不为0,当scrollview的展示的index不为0且向右滑动CollectionView.CollectionView不滑动Cell,而是让scrollvi ...
- 笔记66 Spring Boot快速入门(六)
SpringBoot中使用Mybatis 一.注解方式 1.创建映射文件CategoryMapper.java 使用注解@Mapper 表示这是一个Mybatis Mapper接口.使用@Select ...
- 在Eclipse上安装Spring Tool Suite
. 不装IDE会没有Spring bean configure file Spring Tool Suite是一个基于Eclipse IDE开发环境中的用于开发Spring应用程序的工具,提供了开箱即 ...
- hdu 5792 树状数组+离散化+思维
题目大意: Given a sequence A with length n,count how many quadruple (a,b,c,d) satisfies: a≠b≠c≠d,1≤a< ...
- SpringCloud---分布式服务跟踪---Spring Cloud Sleuth
1.概述 1.1 为什么要用到服务跟踪? 随着业务的发展,系统规模也会变得越来越大,各服务之间的调用关系也变得越来越错综复杂: 通常一个由客户端发起的请求 在后端系统中会经过多个不同的微服务调用 ...
- spring boot 四大组件之Auto Configuration
SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfigurationProperties 或者 @Confi ...
- Java——类之间的关系
3.7 类之间的关系 3.7.1 泛化关系 类和类之间的继承关系及接口与接口之间的继承关系. 3.7.2 实现关系 类对接口的实现. 3.7.3 关联关系 类与类之间的连接,一个类可以知道另一个类的属 ...
- git——commit成功后,GitHub方格不变绿
一通百度该设置的都设置了,还是不好使 发现有提示一栏 pull request的东西 在网上查貌似是因为两个分支内容不同 提示是否合并,还查到了不变绿可能的原因. Contributions未被Gi ...