码迷,mamicode.com
首页 > 数据库 > 详细

【转】oracle 中随机取数据的方法

时间:2019-10-12 13:20:36      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:条件   一个   不能   随机数   顺序   table   问题   bms   扫描   

oracle 中随机取数据的方法:

1.快速随机取数据(推荐使用):

select * from MEMBER sample(1) where rownum <= 10

2.随机取数据,较慢

select * from (
  select * from MEMBER order by dbms_random.value
) where rownum<=10

========原文========

最近在做系统时用到了随机抽取记录的问题;

     上网上查找了很多相关资料,发现了不同的方法及其差异。都是基于ORACLE的方法哦

      首先第一个是随机抽取6个

      select * from  (select * from tablename order by order by dbms_random.value) where  rownum<7

      这个方法的原理我认为应该是把表中的数据全部查询出来按照随机数进行排列后在从查询出来的数据中查询中6条记录,这个方法我在使用的过程中发现,如果记录一多的话查询的速度有一点点的慢,测试时是7000条,如果几万几十万的话可能就更慢了;

     第二个是利用oracle的sample()或sample block方法

     select * from tablename sample ( 50 ) where  rownum<6

      这个稍稍介绍一下sample

     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只对单表生效,不能用于表连接和远程表
      2.sample会使SQL自动使用CBO

【转】oracle 中随机取数据的方法

标签:条件   一个   不能   随机数   顺序   table   问题   bms   扫描   

原文地址:https://www.cnblogs.com/yscit/p/11660820.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!