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)