sql&db

oracle中sql执行计划

字号+ 作者:风潇潇 来源:原创 2016-07-25 11:50 我要评论( )

之前发现一个好东西,那就是oracle中sql的执行计划,可以帮你看清楚sql是否使用了索引,从而让你去优化自己的sql语句。当然如果你能够通过自己的经验判断那更牛了

下面是一条sql的执行计划,这是图。完整的sql就不贴出来了。这里有些名字比较敏感。



当写完一条sql之后,选定这条sql,按F5键,便会生成此sql的oracle数据库的执行计划。
整个表会有2次全表扫描。多次索引扫描,一次union all操作,并为一个试图做排序。
解释一下名词:
TABLE ACCESS FULL 全表扫描,锁定范围会返回所有的row数据
INDEX RANGE SCAN 索引查找,从一段有序的索引里面查找一段值
TABLE ACCESS BY INDEX ROWID 索引里面存了建立索引的字段,以及ROWID。根据从索引里面查找出来的数据的ROWID 返回该行
注意:rownum和rowid都是伪列,但是两者的根本是不同的,rownum是根据sql查询出的结果给每行分配一个逻辑编号,所以你的sql不同也就会导致最终rownum不同,但是rowid是物理结构上的,在每条记录insert到数据库中时,都会有一个唯一的物理记录
NESTED LOOPS 两个表的关联查循环
INDEX UNIQUE SCAN 唯一性索引使用,会返回一条记录,通过唯一的索引返回该记录
SORT ORDER BY 最后结果排序
UNION-ALL UNION ALL 操作

这个有很多循环,但循环都是用索引取得。当然也许这个sql还可优化。
比如:proccess_id 可以建立索引,最后就都是索引查找了,可以减少第一次full表的查询数据,增加full查询时的where条件。这样可以明显减少循环次数


转载请注明出处。

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Mysql自定义函数,从 j 加到 n

    Mysql自定义函数,从 j 加到 n

    2018-05-11 11:26

  • MYSQL中的explain使用的type取值

    MYSQL中的explain使用的type取值

    2018-05-04 14:22

  • sql带有反斜杠的sql查询

    sql带有反斜杠的sql查询

    2018-03-12 10:10

  • MYSQL对数据库字段的更改

    MYSQL对数据库字段的更改

    2017-10-27 09:56

网友点评
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)