存取Oracle当中扫描数据的方法
2008-08-23 12:42:30 来源:WEB开发网在非唯一索引上,谓词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]
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
赞助商链接