oracle中随机抽取函数,Oracle随机抽取数据

oracle中随机抽取函数,Oracle随机抽取数据
新建了⼀个测试表Test,⾥⾯只有⼀个递增的字段“ID”,1万条数据。测试脚本中需把insert语句中的select⼦句作相应的替换
⽅法⼀,使⽤随机数:
全自动电脑针织机
select * from (
select * from test order by dbms_random.value
) where rownum <= 50这是最原始的⽅法,测试脚本执⾏了49分钟还没结束,⼿动停了。测试结果能涵盖1万条数据,命中次数最⾼是343次,最低是209次生铁冶炼
优点:随机性好
缺点:性能差
⽅法⼆,使⽤sample函数:
select * from test sample(10) where rownum<=50;
测试脚本11秒就执⾏完,但测试结果只涵盖了805条数据,并且分布⾮常不均匀,命中次数最⾼是10133次,最低只有1次
活顶尖优点:性能最好
缺点:随机性最差
镇流器外壳⽅法三,结合sample和随机数:
select * from (
select * from test sample(10) order by dbms_random.value
) where rownum <= 50先⽤sample抽取部分数据,再⽤随机数排序。测试脚本运⾏10分钟,测试结果涵盖1万条数据,命中次数最⾼589次,最低423次
优点:性能⽐⽅法⼀好,随机性⽐⽅法⼆好
缺点:因为⽤了sample函数,当数据量⽐较少时,不能保证每次都能返回50条样本数据。抽样的表不能⽤dblink
测试脚本
declare
l_num number := 1;
begin
execute immediate 'truncate table test_result';
联轴器弹簧while l_num <= 100000 loop
insert into test_result
(result)
(select *
from (select * from test order by dbms_random.value)
where rownum <= 50);
if mod(l_num, 1000) = 0 then
防盗commit;
end if;
l_num := l_num + 1; end loop;
commit;
end;

本文发布于:2024-09-21 08:05:16,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/190702.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   测试   脚本   优点   涵盖   结果
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议