oracle表查询随机抽取数据、抽取数据

oracle 表查询随机抽取数据

纵饮孤独 提交于 2019-12-01 03:06:58
最近在做系统时用到了随机抽取记录的问题; 上网上查找了很多相关资料,发现了不同的方法及其差异。都是基于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) 采样表扫描返回表中随机采样数据。