Oracle 执行计划详解(F5)

优化器

2 种优化方式

  • CBO 优于 RBO,是因为 RBO 是一种呆板、过时的优化器,它只认规则,对数据不敏感。毕竟规则是死的,数据是变化的。
优化方式 全称 描述
RBO Rule-Based Optimization
基于规则的优化器
自 Oracle 6 以来被采用,一直沿用至 Oracle 9i,Oracle 10g 开始被弃用。
它有一套严格的使用规则:只要你按照它去写SQL语句,无论数据表中的内容怎么样,也不会影响到你的 “执行计划”
CBO Cost-Based Optimization
基于代价的优化器
自 Oracle 8 中开始引入,但到 Oracle 9i 中才逐渐成熟,在 Oracle 10g 中完全取代 RBO
CBO 是计算各种可能的 “执行计划” 的 “代价(cost)”,从中选用 cost 最低的方案,作为实际运行方案

4 种优化模式

  • 优化器模式包括:选择、规则、第一行、所有行
优化模式 解释
Choolse 默认(重点关注)
当一个表或索引有统计信息时,走 CBO 模式,反之走 RBO 模式
Rule 基于规则的方法,可忽略
First Rows 与 Choose 方式类似,当一个表有统计信息时,它将以最快的方式返回查询的最先的几行,从总体上减少了相应的时间,反之走 RBO 模式
All Rows 同 First Rows,当一个表有统计信息时,以最快的方式返回表的所有行,从总体上提高查询的吞吐量,反之走 RBO 模式

表连接 / 访问方式

表访问方式 - 点击跳转可查看详细

表的访问方式 解释
table access full(全表扫描)
table access by rowid(通过 rowid 扫描)
table access by index scan(索引扫描) index unique scan(索引唯一扫描)
index range scan(索引范围扫描)
index full scan(索引全扫描).
index fast full scan(索引快速扫描)
index skip scan(索引跳跃扫描)

表连接方式详解 - 点击跳转可查看详细

表连接方式 工作原理 适用原则
nested loops 嵌套循环 2层嵌套循环 1.驱动表数据量 < 1W
2.被查找表有索引
hash join 散列连接 较小的表在 RAM 创建 hash table,较大的表读取记录,效率最高 1.等值连接
2. 驱动表大时,效果较好;驱动表小时,效果更好
3. 需要设置参数 HASH_AREA_SIZE
sort merge join 排序合并连接 记录排序然后合并 1. 非等值连接或排序
star join 星型连接 多个维度表 和一个大的 数据表,然后嵌套循环连接 1.一般用于 数据仓库
2. 需要启用参数 STAR_TRANSFORMATION_ENABLED

F5 查看执行计划

  • 工具:PL/SQL
  • 设置:工具 -> 首选项 -> 窗口类型 -> 计划窗口
列字段 解释
对象所有者(Object owner) 属主
对象名称(Object name) 对象名(表名、索引名等)
耗费(Cost) Oracle 估计的该步骤的执行成本,理论上越小越好
基数(Cardinality) Oracle 估计的当前操作的返回结果集行数
字节(Bytes) 执行该步骤后返回的字节数
访问谓词(Access predicates) 知道要什么数据,也知道在哪里,直接去取
一般有索引
过滤谓词(Filter predicates) 先把数据取出来,再判断是否满足条件,不满足就丢弃
一般没有索引
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章