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

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

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

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

分享:

  但是如果查询的数据能全在索引中找到,就可以避免进行第2步操作,避免了不必要的I/O,此时即使通过索引扫描取出的数据比较多,效率还是很高的

  SQL> explain plan for select empno from emp where empno=10;-- 只查询empno列值

  Query Plan

  SELECT STATEMENT [CHOOSE] Cost=1

  INDEX UNIQUE SCAN EMP_I1

  进一步讲,如果sql语句中对索引列进行排序,因为索引已经预先排序好了,所以在执行计划中不需要再对索引列进行排序

  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]

  从这个例子中可以看到:因为索引是已经排序了的,所以将按照索引的顺序查询出符合条件的行,因此避免了进一步排序操作。

  根据索引的类型与where限制条件的不同,有4种类型的索引扫描:

  ●  索引唯一扫描(index unique scan)

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

  ●  索引全扫描(index full scan)

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

  (1) 索引唯一扫描(index unique scan)

  通过唯一索引查找一个数值经常返回单个ROWID。如果存在UNIQUE 或PRIMARY KEY 约束(它保证了语句只存取单行)的话,Oracle经常实现唯一性扫描。

  使用唯一性约束的例子:

  SQL> explain plan for

  select empno,ename from emp where empno=10;

  Query Plan

  SELECT STATEMENT [CHOOSE] Cost=1

  TABLE ACCESS BY ROWID EMP [ANALYZED]

  INDEX UNIQUE SCAN EMP_I1

32/3<123>
重磅发布,2022软件测试行业现状调查报告~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号