a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 128|回复: 0

[考试辅导] Oracle认证辅导:随机抽取记录的方法

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
最近在做系统时用到了随机抽取记录的问题;   上网上查找了很多相关资料,发现了不同的方法及其差异。都是基于ORACLE的方法哦- |$ {# q  F/ f
  首先第一个是随机抽取6个- W5 K4 ^8 A( s0 Y! Y# j
  select * from  (select * from tablename order by order by dbms_random.value) where  rownum<7: J- f; j2 s4 |. Z1 s; \! s4 b9 }
  这个方法的原理我认为应该是把表中的数据全部查询出来按照随机数进行排列后在从查询出来的数据中查询中6条记录,这个方法我在使用的过程中发现,如果记录一多的话查询的速度有一点点的慢,测试时是7000条,如果几万几十万的话可能就更慢了;: T( V+ ]; R# C+ a" K, w' H5 C. |
  第二个是利用oracle的sample()或sample block方法
/ D7 y4 ]) n/ F6 l0 O. V5 \  select * from tablename sample ( 50 ) where rownum<6
* G9 K3 k5 l$ \  这个稍稍介绍一下sample0 E4 o0 C4 n! I9 }+ p4 {- V
  Oracle访问数据的基本方法有:, v" `& [4 M+ c+ I- x, T3 K! ]
  1.全表扫描2.采样表扫描1 @% E9 g( }8 H0 J2 `
  全表扫描(Full table Scan)
3 w1 F/ {3 r: ]4 d8 L' i  全表扫描返回表中所有的记录。
& i1 F" C: y. x7 P% S/ H/ A7 W+ O  执行全表扫描,Oracle读表中的所有记录,考查每一行是否满足WHERE条件。Oracle顺序的读分配给该表的每一个数据块,这样全表扫描能够受益于多块读.每个数据块Oracle只读一次.
' i' O- T% q3 A  I& |, q' K  采样表扫描(sample table scan)
* S: D; j  l; W9 `+ d) K  采样表扫描返回表中随机采样数据。
* |) }$ w7 U9 |  这种访问方式需要在FROM语句中包含SAMPLE选项或者SAMPLE BLOCK选项., G( ^2 d4 X: x. t2 ?
  SAMPLE选项:7 ~' w+ w. a2 t7 V
  当按行采样来执行一个采样表扫描时,Oracle从表中读取特定百分比的记录,并判断是否满足WHERE子句以返回结果。
- |: O  ?- t* F4 I* e) s. v9 W  SAMPLE BLOCK选项:& z! Y: x3 H  _0 K4 q& M9 [
  使用此选项时,Oracle读取特定百分比的BLOCK,考查结果集是否满足WHERE条件以返回满足条件的纪录.
* [# {0 |0 y/ R5 O6 i8 E- M% I  Sample_Percent:
0 j6 H. `9 O4 B7 d  Sample_Percent是一个数字,定义结果集中包含记录占总记录数量的百分比。, P% ^8 r0 t4 F2 K" n& @
  Sample值应该在[0.000001,99.999999]之间。5 N0 O# G* @2 a1 o/ b2 _  c
  主要注意以下几点:
% G2 H! o# c& q6 ]9 X+ G  1.sample只对单表生效,不能用于表连接和远程表2.sample会使SQL自动使用CBO
5 g5 [; }* w& j* M9 x, l( }6 }  看法& @- n: a3 Y( G* T! x" H
  我在测试sample 的时候发现如果我的表中数据有20条,按照它的sample值我写这样的sql: select * from tablename sample(50)   应该结果集中的数据占总数据的50%才对,但是多次执行之后的结果却是多少数据都有,小于50%、大于50%的都有,这跟 Sample_Percent是一个数字,定义结果集中包含记录占总记录数量的百分比 的说明不符,而且用sample block时有时候还能查询出空结果集(select * from tablename sample block(50)) ,不知道是不是我对这个理解不够还是。。。,反正感觉很疑惑;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-6 00:32 , Processed in 0.184200 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表