执行计划总结

oracle访问数据的存取方法  :
  1) 全表扫描(Full Table Scans, FTS)
    2) 通过ROWID的表存取(Table Access by ROWID或rowid lookup)
    3) 索引扫描(Index Scan或index lookup)有4种类型的索引扫描:
     (1) 索引唯一扫描(index unique scan)
     (2) 索引范围扫描(index range scan)
           在非唯一索引上都使用索引范围扫描。使用index rang scan的3种情况:
        (a) 在唯一索引列上使用了range操作符(> < <> >= <= between)
        (实际测试只有用"="的时候才是用的index range scan,其他的走的是全表扫描)
        (b) 在组合索引上,只使用部分列进行查询,导致查询出多行
        (c) 对非唯一索引列上进行的任何查询。
      注:如果条件只能够使用 yyy like '%xxx%'这种用法,则是全表扫描,哪怕yyy是一个索引。 
     (3) 索引全扫描(index full scan)
     (4) 索引快速扫描(index fast full scan)

1.全表扫描(table access full)的情况:

 a.where条件中如果有like,那么无论like后的字段是否加了索引或者是否有unique约束,都会有是全表扫描。这种情况消耗的IO比较高,一般都好几千以上。

 b.没有where条件,这种情况肯定是全表查询。

2.通过rowid的表存取(Table Access By ROWID

  首先需要理解下索引。因为通过所以索引查询的时候,实际上是先通过查询索引对应的rowid,然后再通过rowid来查询具体的行。

由此查询时如果走索引的实际上全都会走 Table Access By Rowid;

 3.索引扫描

  a.索引唯一扫描(index unique scan)

    查询条件中 如xx=1234, 如果xx是主键或者唯一性约束所在列,则走index unique scan

  b.索引范围扫描(index range scan)

原文地址:https://www.cnblogs.com/Sunnor/p/4562964.html