Oracle执行计划

一、配置执行计划

Tools—Preferences—Window Types—Plan Window

二、查看执行计划

  1. 选中代码块
  2. Tools—Explain plan 或者 F5

 

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

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

2、执行顺序

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

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

  • TABLE ACCESS FULL (全表扫描)

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

  • TABLE ACCESS BY NDEX ROWID (通过ROWID的表存取)

ROWID是由Oracle自动加在表中每行最后的一列伪列,既然是伪列,就说明表中并不
会物理存储ROWID的值。
你可以像使用其它列一样使用它,只是不能对该列的值进行增、删、改操作。
一旦一行数据插入后,则其对应的ROWID在该行的生命周期内是唯-的,即使发生行
迁移,该行的ROWID值也不变。

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

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

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

1、索引扫描实际分两步:

—扫描索引得到对应的ROWID,
—通过ROWID定位到具体的行读取数据。

2、五种索引扫描

INDEX UNIQUE SCAN (索引唯一扫描):

 针对唯:唯一性索引(UNIQUE INDEX)的扫描,每次至多只返回一条记录;
表中某字段存在UNIQUE、PRIMARYKEY约束时,Oracle 常实现唯一性扫描

INDEX RANGE SCAN (索引范围扫描):

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

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

在唯一索引列上使用了范围操作符(如: >, <, <>,  >=, <=, between) ;
在组合索引上,只使用部分列进行查询(查询时必须包含前导列,香则会走全表扫描);
对非唯一索引列上进行的任何查询;

INDEX FULL SCAN (索引全扫描):

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

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

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

INDEX SKIP SCAN (索引跳跃扫描):

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

 

四、Oracle优化器

  • RBO (Rule-Based Optimization)基于规则的优化器

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

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

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

posted @ 2021-10-07 23:13  白_沙  阅读(300)  评论(0编辑  收藏  举报