WEB开发网
开发学院数据库Oracle 存取Oracle当中扫描数据的方法 阅读

存取Oracle当中扫描数据的方法

 2008-08-23 12:42:30 来源:WEB开发网   
核心提示: 在非唯一索引上,谓词col = 5可能返回多行数据,存取Oracle当中扫描数据的方法(4),所以在非唯一索引上都使用索引范围扫描,使用index rang scan的3种情况:(a) 在唯一索引列上使用了range操作符(> < <> >= <= be

在非唯一索引上,谓词col = 5可能返回多行数据,所以在非唯一索引上都使用索引范围扫描。

使用index rang scan的3种情况:

(a) 在唯一索引列上使用了range操作符(> < <> >= <= between)

(b) 在组合索引上,只使用部分列进行查询,导致查询出多行

(c) 对非唯一索引列上进行的任何查询。

(3) 索引全扫描(index full scan)

与全表扫描对应,也有相应的全索引扫描。而且此时查询出的数据都必须从索引中可以直接得到。

全索引扫描的例子:

AnIndexfullscanwillnotperformsingleblocki/o'sandsoitmayprovetobeinefficient.
  e.g.
  IndexBE_IXisaconcatenatedindexonbig_emp(empno,ename)
  SQL>explainplanforselectempno,enamefrombig_emporderbyempno,ename;
  QueryPlan
  SELECTSTATEMENT[CHOOSE]Cost=26
  INDEXFULLSCANBE_IX[ANALYZED]

(4) 索引快速扫描(index fast full scan)

扫描索引中的所有的数据块,与 index full scan很类似,但是一个显著的区别就是它不对查询出的数据进行排序,即数据不是以排序顺序被返回。在这种存取方法中,可以使用多块读功能,也可以使用并行读入,以便获得最大吞吐量与缩短执行时间。

索引快速扫描的例子:

BE_IX索引是一个多列索引: 

   big_emp(empno,ename)
  SQL>explainplanforselectempno,enamefrombig_emp;
  QueryPlan
  SELECTSTATEMENT[CHOOSE]Cost=1
  INDEXFASTFULLSCANBE_IX[ANALYZED]

只选择多列索引的第2列:

   SQL>explainplanforselectenamefrombig_emp;
  QueryPlan
  SELECTSTATEMENT[CHOOSE]Cost=1
  INDEXFASTFULLSCANBE_IX[ANALYZED]

上一页  1 2 3 4 

Tags:存取 Oracle 当中

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接