首页 / ORACLE / Oracle ->> 随机函数
Oracle ->> 随机函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Oracle ->> 随机函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1880字,纯文字阅读大概需要3分钟。
内容图文
![Oracle ->> 随机函数](/upload/InfoBanner/zyjiaocheng/1057/a0bd310611f74c91b62a9c96005ca046.jpg)
SQL SERVER下生成随机数据干得多,可是到了Oracle下我就傻了。没用过Oracle,不知道该怎么办?SQL SERVER下依靠TABLESAMPLE或者CHECKSUM(NEWID())来做随机抽样,Oracle则有它自己的随机抽样方法。
这里找到一篇文章讲得挺好的:http://www.cnblogs.com/Athrun/archive/2009/04/25/1443619.html
Oracle下随机取样相关的办法有:
1)SAMPLE(percent)
2)SAMPLE BLOCK(percent)
3)dbms_random包,包括dbms_random.random,dbms_random.value
4)sys_guid()
差不多就是上面这几种吧
那其实我觉得各有各的特点,如果单论性能那肯定SAMPLE的性能最好了,Oracle的采样技术减少了过程需要扫描的BLOCK数量,而SAMPLE BLOCK(percent)和SAMPLE(percent)比谁性能要更好就不清楚了,不晓得Oracle扫描的时候是一个BLOCK取一行还是把整个BLOCK的行都取出来。我想SAMPLE BLOCK的性能应该是要比SAMPLE的性能要更好。不过离散分布率要更低。
其实和SQL SERVER下的TABLESAMPLE一样,用SAMPLE的问题在于离散率。如果我们对某个取样数据的离散率要求很高,那显然dbms_random和sys_guid()应该比SAMPLE要做得更好。
这里对比一下SAMPLE, dbms_random.random和dbms_random.value的差异
select * from NUMBERS SAMPLE(0.1) orderby ID ASC; select*from ( select*from NUMBERS orderby dbms_random.random ) where rownum <=100orderby ID ASC; select*from ( select*from NUMBERS orderby dbms_random.value ) where rownum <=100orderby ID ASC;
SAMPLE的结果输出了112行,表的行数是10万行,percent为0.1,按道理应该输出100行整。证明SAMPLE对于行数还是不确定。这里还得再离散提取前100行出来。不过我相信它的性能应该是最好的,耗时上也证明了这一点。而且和后面两个对比数据分布的离散化也是差不多,我之前担忧的会出现同一个BLOCK下的行多数或者都被提出来的情况似乎是多余,这里的数据分布和其他两者相近。至于说其他两者的性能似乎相差无几,基本一样。不过这里有篇博文好像说random比value性能要好,http://www.blogjava.net/pengpenglin/archive/2009/03/19/206796.html
dbms_random.random的结果
dbms_random.value的结果
有几点要注意的是
1) SAMPLE只对单表有效,远程表和连接查询无效
2)SAMPLE会使SQL自动使用CBO
这里摘取别人文章中关于sys.guid()函数的注释
注:
在使1)方法时,即使用sys_guid() 这种方法时,有时会获取到相同的记录,即和前一次查询的结果集是一样的,我查找了相关资料,有些说是和操作系统有关,在windows平台下正常,获取到的数据是随机的,而在linux等平台下始终是相同不变的数据集,有些说是因为sys_guid()函数本身的问题,即sys_guid()会在查询上生成一个16字节的全局唯一标识符,这个标识符在绝大部分平台上由一个宿主标识符和进程或进程的线程标识符组成,这就是说,它很可能是随机的,但是并不表示一定是百分之百的这样.
在Oracle中一般获取随机数的方法是:
select dbms_random.value(0, 1000) from dual; (0-1000的浮点数)
随机函数' ref='nofollow'>Oracle ->> 随机函数
原文:http://www.cnblogs.com/jenrrychen/p/4605632.html
内容总结
以上是互联网集市为您收集整理的Oracle ->> 随机函数全部内容,希望文章能够帮你解决Oracle ->> 随机函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。