Oracle数据库开发学习笔记

一、oracle访问数据的存取方法

1.1 全表扫描(Full Table Scans, FTS)

1.1.1 描述:

1) Oracle读取表中所有的行,并检查每一行是否满足语句的WHERE限制条件。

2) 极大的减少了I/O总次数,提高了系统的吞吐量。

3) 只有在全表扫描的情况下才能使用多块读操作。

4) 在这种访问模式下,每个数据块只被读一次。

1.1.2 例子:

SQL> explain plan for select * from dual;

Query Plan

-----------------------------------------

SELECT STATEMENT[CHOOSE] Cost=

TABLE ACCESS FULL DUAL

 

1.2通过ROWID的表存取(Table Access by ROWID或rowid lookup)

1.2.1 描述:

1) 通过ROWID来存取数据可以快速定位到目标数据上。

2) 是Oracle存取单行数据的最快方法。

3) 一次I/O只能读取一个数据块。

1.2.2 例子:

SQL> explain plan for select * from dept where rowid = 'AAAAyGAADAAAAATAAF';

Query Plan

------------------------------------

SELECT STATEMENT [CHOOSE] Cost=1

TABLE ACCESS BY ROWID DEPT [ANALYZED]

 

1.3 索引扫描(Index Scan或index lookup)

1.3.1 描述:

1) 在索引中,除了存储每个索引的值外,索引还存储具有此值的行对应的ROWID值。

2) 索引扫描可以由2步组成: (1)扫描索引得到对应的rowid值。

(2) 通过找到的rowid从表中读出具体的数据。

3) 第一步通常是逻辑I/O,第二步对于大表来说会有部分物理I/O。所以对于大表使用该扫描方式,效率会下降许多。

4) 若能避免第二步,则效率还是很高的。

1.3.2 例子:

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

 

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

------------------------------------

SELECT STATEMENT [CHOOSE] Cost=1

INDEX UNIQUE SCAN EMP_I1

1.3.4 扩展:

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

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

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

使用唯一性约束的例子:

select empno,ename from emp where empno=10;

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

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

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

select empno,ename from emp where empno > 7876 order by empno;

·索引全扫描(index full scan)

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

select empno, ename from big_emp order by empno,ename;

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

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

索引快速扫描的例子:

select empno,ename from big_emp;

 

二、Oracle函数

1.单行函数:

函数 结果

1.1 大小写控制函数: lower('SQL plus') sql plus

  upper('SQL plus') SQL PLUS

initcap('SQL plus') Sql Plus

2.多行函数:

----------------------------------------------------------------------------------------------------------------------------

参考文献:

1.http://database.51cto.com/art/200703/43583.htm

你可能感兴趣的:(Oracle数据库开发学习笔记)