执行计划

一条查询语句在Oracle中的执行过程或访问路径的描述;


一、配置执行计划需要显示的项(pl/sql developer)

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


基数(Cardinality):Oracle估计的当前操作的返回结果集;

数字节(Bytes):执行该步骤后返回的字节数;

耗费/代价值(cost)、CPU耗费:Oracle估计的该步骤的执行成本,用于说明SQL执行的代 价,理论上越小越好(该值可能与实际有出入);

时间(time):Oracle估计的当前操作所需的时间;


三、使用执行计划


通过工具启动执行计划
选中需要查看执行计划的查询语句,在工具栏中选择Tools–>Explain Plan

选择需要查看执行计划的查询语句后按F5;


四、查看执行计划


执行顺序

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

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

1.Table Access full(全表扫描)

2.Table Access by index rowid(通过rowid的表存取)

3.Table Access by index scan(索引扫描)

Table Access full(全表扫描)

Oracle会读取表中所有的行,并检查每一行是否满足SQL语句中的where限制 条件;

使用建议

数据量太大的表不建议使用全表扫描,除非本身需要取出的数据较 多, 占到表数据总量的5%~10%或以上;

Table Access by index rowid(通过rowid的表存取)

1.Rowid与rownum的区别
rowid 用于定位数据表中某条数据的位置,是唯一的、也不会改变;

rownum 表示查询某条记录在整个结果集中的位置, 同一条记录查询条件不同对应的 rownum 是不同的而 rowid 是不会变的;

2.Rowid
由Oracle自动加在表中每行最后的一列伪列,既然是伪列,就说明表中并不会物理存储rowid的值;

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

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

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

Table Access by index Sean(索引扫描)

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

2.索引扫描其实分为两步
扫描索引得到对应的rowid;
通过rowid定位到具体的行读取数据;

五种索引扫描

1.Index unique scan(索引唯一扫描)
针对唯一性索引(unique index)的扫描,每次至多只返回一条记录;表中某字段存在unique、primary key约束时,Oracle常实现唯一性扫描;

2.Index range scan(索引范围扫描)
使用一个索引存取多行数据;

发生索引范围说明的三种情况
在唯一索引列上使用了范围操作符(<、>、<>、>=、<=、between);

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

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

3.Index full scan(索引全扫描)
进行全索引扫描时,查询出的数据都必须从索引中可以直接找到;

4.Index fast full scan(索引快速扫描)
扫描索引中的所有的数据块,与index full scan类似,但是一个显著的区 别是:他不对查询出的数据进行排序(即数据不是以排序顺序返回);

5.Index skip scan(索引跳跃扫描)
表有一个复合索引,且在查询时有除了前导列(索引中的第一列)外的其 他列作为条件;

Oracle的优化器

RBO(rule-based optimization)基于规则的优化器;
CBO(cost-based optimization)至于代价的优化器;
1.RBO优化器
有严格的使用规则,只要按照这套规则去写SQL语句,无论数据表中的内 容怎样,也不会影响到执行计划。换句话说,rbo对数据“不敏感”,它 要求SQL编写任意必须要了解各项细则。Rbo一直沿用值Oracle9i,从 Oracle10g开始,rbo已经彻底被抛弃;

2.CBO优化器
一种比rbo更加合理、可靠的优化器,在Oracle10g中完全取代了rbo。 Cbo通过计算各种可能的执行计划的“代价”,即cost,从中选用cost最 低的执行方案作为实际运行方案;

SQL语言之执行计划(Oracle)相关推荐

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

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

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

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

  3. oracle++spm,ORACLE 11G 使用SPM来调整SQL语句的执行计划

    跟大家说明一下: ITSM 数据库迁移升级到11G后,有几条SQL语句的执行计划不正确,而且这些语句都是使用绑定变量的. 最初的调整想法是获得这些的语句的绑定变量值,将获得的字面值直接替换SQL语句的 ...

  4. oracle数据库通过SQL profile 绑定SQL最优执行计划(个人实践)

    1.执行SQL语句,同时使用如下命令查找SQL ID select a.SQL_ID,b.SQL_TEXT,b.LAST_LOAD_TIME,b.LAST_ACTIVE_TIME   from v$s ...

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

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

  6. error40无法打开到sql_技术分享|初识SQL优化之执行计划查看分析

    董  俊 合肥科技研发中心 一 为什么要进行SQL优化 应用程序运行缓慢的原因通常分为两个方面:源代码和SQL语句.对应用程序的优化也通常针对源代码和SQL语句.源代码的优化,一方面可能会涉及对程序逻 ...

  7. 利用sql profile固定执行计划加快OGG同步

    ogg是逻辑同步,不想ADG利用后镜像直接修改block中的内容,ogg是根据redo片中SQL,以及SQL对应的后镜像值进行表的修改,这样如果大表上面没有索引,或者走错索引就会导致同步慢.但是OGG ...

  8. oracle清除执行计划,Oracle数据库9I中清除特定表相关执行计划案例

    天萃荷净 在9i中因为某个执行计划因为Oracle Peeking绑定变量的控制导致现有的执行计划不正确,需要清除掉这条sql语句的执行计划.在10g中提供了dbms_shared_pool.purg ...

  9. 了解Sql Server的执行计划

    前一篇总结了Sql Server Profiler,它主要用来监控数据库,并跟踪生成的sql语句.但是只拿到生成的sql语句没有什么用,我们可以利用这些sql语句,然后结合执行计划来分析sql语句的性 ...

最新文章

  1. Linux操作系统Ubuntu部署Mysql篇
  2. centos7全离线安装docker1.17.12
  3. mysql case when 解释_mysql 语法一 :case when详解
  4. SOA系列文章(二):服务设计原理:服务模式和反模式
  5. 算法(14)-leetcode-explore-learn-数据结构-二叉树的遍历
  6. Bootstrap3代码模板
  7. linux系统管理之单机系统管理 - 超级用户和进程管理
  8. Ansible(二)——基本环境的部署以及常用模块的使用
  9. linux 单机跨进程通信
  10. 全国大学生数学建模2016年A题系泊系统的设计论文与代码
  11. 【开源】云开发,一个功能相对齐全的校园社区论坛类小程序源码,表白墙小程序
  12. 原生滑动选择器 html,自已开发完美的触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器 - j.king...
  13. sql sever还原失败:无法覆盖文件,数据库 'XX' 正在使用该文件”的问题
  14. 笔记本玩游戏掉帧怎么办。
  15. web前端程序员前景及优劣势分析
  16. ZVK13(参考VK13)查销售价格
  17. AI:人工智能领域之AI发展历史的重要历史时间节点、大牛们对AI相关概念的定义
  18. 中国象棋AI实现01
  19. 基于Problem Solving with Algorithms and Data Structures using Python的学习记录(4)——Recursion
  20. c语言中while中的判断语句为感叹号x时是什么意思?

热门文章

  1. 「CF622F」The Sum of the k-th Powers「拉格朗日插值」
  2. hadoop集群配置问题及思考
  3. 如何使用.NET配置文件(二)
  4. AB1601GPIO不支持较高频率的脉冲中断
  5. kthread_work和kthread_worker机制
  6. C++ Primer 5th笔记(chap 16 模板和泛型编程)默认模板实参
  7. Bitcoin0.21版 公链开发(3) 网关PHP windows上安装
  8. 攻防世界Reverse第九题no-strings-attached
  9. Kubernetes存储之Secret
  10. 【Python整蛊合集】多份整蛊代码,发给朋友之后我.....(友尽系列推荐)