看懂Oracle执行计划

一:什么是Oracle执行计划?

执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述,注意,是查询语句。

 二:怎样查看Oracle执行计划?

以PLSQL为例:

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

基数(Rows):Oracle估计的当前操作的返回结果集行数

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

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

时间(Time):Oracle估计的当前操作所需的时间

1):打开执行计划:

在SQL窗口选中一条  SELECT 语句后,或者选中Tools > Explain Plan,或者按 F5 即可查看刚刚执行的这条查询语句的执行计划

看懂Oracle执行计划

打开执行计划后,可以点击配置按钮进行显示配置。如图

看懂Oracle执行计划

进入如下界面

看懂Oracle执行计划

中文版图解,英语较差的童鞋可以参考。

看懂Oracle执行计划

 

  三:看懂Oracle执行计划

①:执行顺序:

看懂Oracle执行计划

 

根据上图中description列的缩进来判断,缩进最多的最先执行,缩进相同时,最上面的最先执行,可以通过点击图中箭头,查看执行顺序。

对图中动作的一些说明:

1. 上图中 TABLE ACCESS BY …  即描述的是该动作执行时表访问(或者说Oracle访问数据)的方式;

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

  • TABLE ACCESS FULL(全表扫描)
  • TABLE ACCESS BY INDEX ROWID(通过ROWID的表存取)
  • INDEX FULL SCAN(索引扫描)

(1) TABLE ACCESS FULL(全表扫描)

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

全表扫描时可以使用多块读(即一次I/O读取多块数据块)操作,提升吞吐量;

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

(2) TABLE ACCESS BY ROWID(通过ROWID的表存取) :

先说一下什么是ROWID?

看懂Oracle执行计划

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

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

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

让我们再回到 TABLE ACCESS BY INDEX ROWID 来,INDEX指索引列,也就是说,这里走的是索引的表的ROWID。

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

相关推荐