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

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

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

时间: 2024-10-20 05:58:56

【转】oracle 中随机取数据的方法的相关文章

【转】oracle 中随机取一条记录的两种方法

oracle 中随机取一条记录的两种方法 V_COUNT INT:=0; V_NUM INT :=0; 1:TBL_MYTABLE 表中要有一个值连续且唯一的列FID BEGIN SELECT COUNT(*) INTO V_COUNT FROM  TBL_MYTABLE; SELECT TRUNC(DBMS_RADOM.VALUE(1,V_COUNT+1)) INTO V_NUM FROM DUAL; SELECT * FROM TBL_MYTABLE T WHERE T.FID=V_NUM;

lamda表达式 随机取数据的方法

随机取数据,关键要用到Guid.NewGuid()才可以的,Take(10)表示随机取10条记录 var _icpics = DB.I_FirstRecommend.GetAllList().Where(s => !string.IsNullOrEmpty(s.Scenery)).OrderBy(s => Guid.NewGuid()).Take(10).ToList();//随机只取1图片就可以了

mysql 在数据表中随机取数据或随机排序

最近遇到一个需求,就是随机取数据,本着拿来主义的精神,网上找了找,基本上都是这个下面这个内容,但是并不能让人满意: 1.select * from users order by rand() LIMIT 1 2.SELECT * FROM users  AS t1  JOIN (SELECT ROUND(RAND() * ((SELECT MAX(userId) FROM `users`)-(SELECT MIN(userId) FROM users))+(SELECT MIN(userId)

MySQL随机获取数据的方法,支持大数据量

最近做项目,需要做一个从mysql数据库中随机取几条数据出来. 总所周知,order by rand 会死人的..因为本人对大数据量方面的只是了解的很少,无解,去找百度老师..搜索结果千篇一律.特发到这里来,供大家学习. 在mysql中带了随机取数据的函数,在mysql中我们会有rand()函数,很多朋友都会直接使用,如果几百条数据肯定没事,如果几万或百万时你会发现,直接使用是错误的.下面我来介绍随机取数据一些优化方法. SELECT * FROM table_name ORDER BY ran

mysql实现高效率随机取数据

从数据库中(mysql)随机获取几条数据很简单,但是如果一个表的数据基数很大,比如一千万,从一千万中随机产生10条数据,那就相当慢了,如果同时一百个人访问网站,处理这些个进程,对于一般的服务器来说,肯定是要死机的. mysql数据库获取随机数据的函数rand(),我建议轻易不要用这个,我写博客的时候试了一下,从16万数据里随机获取5条数据,用时14.02秒,这个耗费满惊人的. SELECT * FROM t_share ORDER BY rand() LIMIT 5; 通过mysql最大值函数m

Oracle中随机抽取N条记录

一.Oracle取随机数据  1.Oracle访问数据的基本方法:  1).全表扫描(Full table Scan):执行全表扫描,Oracle读表中的所有记录,考查每一行是否满足WHERE条件.Oracle顺序的读分配给该表的每一个数据块,且每个数据块Oracle只读一次.这样全表扫描能够受益于多块读. 2).采样表扫描(sample table scan):扫描返回表中随机采样数据,这种访问方式需要在FROM语句中包含SAMPLE选项或者SAMPLE BLOCK选项.     注:从Ora

STL系列十一 随机三趣题——随机重排,文件中随机取一行,生成N个随机数

本文将介绍三个有趣的随机问题,分别是随机重新排列.从文件中随机取一行数据.生成N个随机数. 一.随机重新排列 将一个序列打乱并对其进行随机的重新排列,关键在于每种序列的被选择概率要一样,不然有失"公平".现在让我们来寻找如何保证每种序列被选择的概率一样大的算法. 首先假设这个数组只有二个元素,设数组a为{1, 2},显然这个数组只有二种可能的排列,要么是{1,2}要么是{2,1}.很容易想到一种方法--只要第二个元素有50%的概率与第一个元素交换即可.用代码表现下: if (rand(

oracle中imp导入数据中文乱码问题(转)

(转自  http://blog.chinaunix.net/uid-186064-id-2823338.html) oracle中imp导入数据中文乱码问题 用imp命令向oracle中导入数据后,所有查询出的中文字段都为乱码. 原则上不修改服务器端的字符集,修改服务器端的字符集会出现使用第三方工具登陆数据库出现乱码的情况(具体服务器端的字符集修改办法本文有详细介绍). 将DMP文件的字符集改成与Oracleo数据库服务器端一样之后导入可正常显示.本人的系统是RHEL 5.4 32bit 一.

Oracle中对列加密的方法

Oracle中对列加密的方法 2011-12-22 17:21:13 分类: Linux Oracle支持多种列加密方式: 1,透明数据加密(TDE):create table encrypt_col(id int,txt varchar2(100) encrypt using '算法名称' identified by '密钥' no salt);优点:对应用完全透明缺点:需要数据库管理员管理wallet,增加了管理复杂性,也无法避免数据库管理员查看原文. 2,使用DBMS_CRYPTO包优点: