浅析Oracle数据库中扫描数据的方法

发表于:2008-12-18 14:46

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:樊斌    来源:IT专家网

分享:

  (2) 索引范围扫描(index range scan)

  使用一个索引存取多行数据,在唯一索引上使用索引范围扫描的典型情况下是在谓词(where限制条件)中使用了范围操作符(如>、<、<>、>=、<=、between)

  使用索引范围扫描的例子:

  SQL> explain plan for select empno,ename from emp

  where empno > 7876 order by empno;

  Query Plan

  SELECT STATEMENT[CHOOSE] Cost=1

  TABLE ACCESS BY ROWID EMP [ANALYZED]

  INDEX RANGE SCAN EMP_I1 [ANALYZED]

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

  使用index rang scan的3种情况:

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

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

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

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

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

  全索引扫描的例子:

  An Index full scan will not perform single block i/o's and so it may prove to be inefficient.

  e.g.

  Index BE_IX is a concatenated index on big_emp (empno, ename)

  SQL> explain plan for select empno, ename from big_emp order by empno,ename;

  Query Plan

  SELECT STATEMENT[CHOOSE] Cost=26

  INDEX FULL SCAN BE_IX [ANALYZED]

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

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

  索引快速扫描的例子:

  BE_IX索引是一个多列索引:

  big_emp (empno,ename)

  SQL> explain plan for select empno,ename from big_emp;

  Query Plan

  SELECT STATEMENT[CHOOSE] Cost=1

  INDEX FAST FULL SCAN BE_IX [ANALYZED]

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

  SQL> explain plan for select ename from big_emp;

  Query Plan

  SELECT STATEMENT[CHOOSE] Cost=1

  INDEX FAST FULL SCAN BE_IX [ANALYZED]

33/3<123
100家互联网大公司java笔试题汇总,填问卷领取~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号