Oracle实现某表随机抽取数据(随机性抽取)
更新时间:2024年08月12日 14:59:11 作者:蜗牛_小吴
这篇文章主要介绍了Oracle实现某表随机抽取数据(随机性抽取),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
Oracle实现某表随机抽取数据
目前我知道的三种方式:
1. 使用随机数
select * from ( select * from t_table order by dbms_random.value ) where rownum <= 1000
- 概述 : 这种方式相对比较原始 , 就是 更具随机的值进行 排序 , 然后 再进行 获取 前 1000 行数据 .
- 优点 : 随机性 好
- 缺点 : 性能差 (当进行获取的数据量 越大 , 执行的时间就越长 )
2. 使用sample函数
select * from t_table sample(10) where rownum <=1000
- 概述 : sample函数 旨在 随机样本抽取 , 但是涵盖的数据 分布 非常不均匀 .
- 优点 : 性能好 (执行的时间相对比较短)
- 缺点 : 随机性差(因为涵盖的数据分布非常不均匀)
3. 结合上述两种方式(随机数+sample函数)
select * from ( select * from t_table sample(10) order by dbms_random.value ) where rownum <= 1000
- 概述 : 这种是先使用sample函数 抽取部分数据, 再使用随机数进行排序 .
- 优点 : 性能相对较好 (比方式一 性能好 , 比方式二 随机性好)
- 缺点 : 数据命中率不能达到 百分百 (因为使用了 sample函数 , 当数据量比较少时 , 不能保证每次都能返回 获取的样本数据 , 抽样的表不能用 dblink[数据库连接])
Oracle数据库:随机查询100条数据
方法一
SELECT m.* FROM (SELECT u.* FROM USER_INFO u order by dbms_random.value()) m where rownum < 100;
注:USER_INFO约40w条数据.
方法二
SELECT * FROM USER_INFO SAMPLE(50) WHERE ROWNUM < 101;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
MS Server和Oracle中对NULL处理的一些细节差异
SQL Server和Oracle中对插入数据值包含空的处理有所差异,在SQL Server中,我们可以把表字段设计为非空,但我们仍然可以通过下面语句执行插入操作2009-06-06
最新评论