oracle优化3(访问Table的方式)

 

访问Table的方式

ORACLE 采用三种访问表中记录的方式: 全表扫描、通过ROWID访问表、索引扫描

 

全表扫描(full table scan

全表扫描就是顺序地访问表中每条记录. ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描.

 

通过ROWID访问表(table access by ROWID

行的ROWID指出了该行所在的数据文件、数据块以及行在该块中的位置,所以通过ROWID来存取数据(表中记录的物理位置信息)可以快速定位到目标数据上,是Oracle存取单行数据的最快方法。

为了通过ROWID存取表,Oracle 首先要获取被选择行的ROWID,或者从语句的WHERE子句中得到,或者通过表的一个或多个索引的索引扫描得到。Oracle然后以得到的ROWID为依据定位每个被选择的行。

 

索引扫描(Index scan

我们先通过index查找到数据对应的rowid(对于非唯一索引可能返回多个rowid),然后根据rowid直接从表中得到具体的数据,这种查找方式称为索引扫描或索引查找(index lookup)。一个rowid唯一的表示一行数据,该行对应的数据块是通过一次i/o得到的,在此情况下该次i/o只会读取一个数据库块。

在索引中,除了存储每个索引的值外,索引还存储具有此值的行对应的ROWID值。索引扫描可以由2步组成:(1) 扫描索引得到对应的rowid值。 (2) 通过找到的rowid从表中读出具体的数据。

posted @ 2011-03-31 13:07  liuqun  阅读(608)  评论(0编辑  收藏  举报