日期:2014-05-16  浏览次数:20519 次

oracle--随机查询

转自:http://1985wanggang.blog.163.com/blog/static/77638332010424102256740/

?

Oracle8i开始Oracle提供采样表扫描特性。

Oracle访问数据的基本方法有:
1.
全表扫描
2.
采样表扫描

全表扫描(Full table Scan)
全表扫描返回表中所有的记录。
执行全表扫描,Oracle读表中的所有记录,考查每一行是否满足WHERE条件。Oracle顺序的读分配给该表的每一个数据块,这样全表扫描能够受益于多块读.
每个数据块Oracle只读一次.

采样表扫描(sample table scan)
采样表扫描返回表中随机采样数据。
这种访问方式需要在FROM语句中包含SAMPLE选项或者SAMPLE BLOCK选项.

SAMPLE选项:
当按行采样来执行一个采样表扫描时,Oracle从表中读取特定百分比的记录,并判断是否满足WHERE子句以返回结果。

SAMPLE BLOCK选项:
使用此选项时,Oracle读取特定百分比的BLOCK,考查结果集是否满足WHERE条件以返回满足条件的纪录.

Sample_Percent:
Sample_Percent
是一个数字,定义结果集中包含记录占总记录数量的百分比。
Sample
值应该在[0.000001,99.999999]之间。

1.使用SAMPLE选项

SQL> select * from employee SAMPLE(30);

?

???? EMPNO ENAME????? JOB????????????? MGR HIREDATE???????? SAL?????? COMM???? DEPTNO

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

????? 7369 SMITH????? CLERK?????????? 7902 17-DEC-80??????? 800??????????????????? 20

????? 7788 SCOTT????? ANALYST???????? 7566 19-APR-87?????? 3000??????????????????? 20

????? 7839 KING?????? PRESIDENT??????????? 17-NOV-81?????? 5000??????????? ????????10

?

Execution Plan

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

?? 0????? SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=25 Bytes=2175)