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) order by ID ASC;

select * from (
select * from NUMBERS
order by dbms_random.random )
where rownum <= 100
order by ID ASC; select * from (
select * from NUMBERS
order by dbms_random.value )
where rownum <= 100
order by 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 trunc(dbms_random.value(0, 1000)) from dual; (0-1000的整数)
select dbms_random.value(0, 1000) from dual; (0-1000的浮点数)

Oracle ->> 随机函数的更多相关文章

  1. Oracle dbms_random随机函数包

    dbms_random是oracle提供的一个随机函数包,以下是它的一些常用的功能: 1.dbms_random.value 作用:生成一个大于等于0,大于等于1的随机的38位小数,代码如下: sel ...

  2. 深入理解Oracle中的随机函数

    --Oracle中取随机值的函数 .dbms_random包 dbms_random包提供了一系列的随机值获取函数以及相关存储过程.下面详细讲解常用的函数和过程. ()dbms_random.rand ...

  3. Oracle 关于几个随机函数sys_guid、dbms_random.random、dbms_random.value(取随机的结果集)

    sys_guid():SYS_GUID (),是Oracle 8i 后提供的函数.SYS_GUID产生并返回一个全球唯一的标识符(原始值)由16个字节组成.更适合多个数据库数据集成时使用(--源自百度 ...

  4. 常用Oracle SQL语句(汇总版)

    Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象 一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, ...

  5. oracle常用SQL语句(汇总版)

    Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, ...

  6. oracle 语句汇总

    Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象 一.数据控制语句 (DML) 部分 1.INSERT  (往数据表里插入记录的语句) INSERT INTO 表名(字段名1 ...

  7. Oracle中查询各种对象的方法小结

    --查看当前库中的所有表select * from all_tables a where a.table_name='INFOCODE_P20081'--查看表结构select * from all_ ...

  8. ORACLE数据库 DBA常用知识

    <常用命令参考> 个系统变量值 SQL> show user --显示当前连接用户 SQL> show error --显示错误 SQL> set heading off ...

  9. Oracle常用语句

    Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, ...

随机推荐

  1. 四则运算程序扩展:将程序改为java语言,并允许用户输入,对输入结果进行验证

    题目 每个同学选一个方向,把程序扩展一下:1.让程序能接受用户输入答案,并判定对错.最后给出总共对/错 的数量.2.把程序变成一个网页程序,用户通过设定参数,就可以得到各种题目.3.把程序变成一个Wi ...

  2. java面试资料总结

    一.java基础部分 1.一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 可以,但是只能有一个public类,且类名与文件名相同 2.java有没有goto? goto是ja ...

  3. 如何在Android模拟器上安装apk文件

    1.运行SDK Manager,选择模拟器,并运行模拟器 SDK Manager应用 2.将需要安装的apk文件复制到platform-tools目录下(默认在:D:\tools\android\ad ...

  4. yii的常用配置文件

    <?php return array( 'basePath' => dirname(__FILE__).DIRECTORY_SEPARATOR.'..', //当前应用根目录路径 'nam ...

  5. 关于django批量上传图片

    本来想一张一张上传的,但是明显会对客户造成不必要的麻烦,所以如果前台一次性上传五张十张的话,那就简单的多. 但是后台我数据库对于图片存储的字段只有一个,不可能有多少张照片就要多少个字段来存储.也就是说 ...

  6. Silverlight编程模型

    Silverlight支持Javascript API编程模型和托管API编程模型这两种编程模型,它们的基本作用都是用于XAML界面文件中的XAML对象,基于托管API编程的XAML应用程序是通过x: ...

  7. JS中showModalDialog 详细使用(转)

    基本介绍: showModalDialog()         (IE 4+ 支持) showModelessDialog()      (IE 5+ 支持) window.showModalDial ...

  8. VSync Count 垂直同步

    原地址:http://blog.csdn.net/yesy10/article/details/7794556 Unity3D中新建一个场景空的时候,帧速率(FPS总是很低),大概在60~70之间.一 ...

  9. 从3D Studio Max导入物体 Importing Objects From 3D Studio Max

    原地址:http://game.ceeger.com/Manual/HOWTO-ImportObjectMax.html If you make your 3D objects in 3dsMax, ...

  10. unity3d中dllimport方法的使用,以接入腾讯平台为例!!!

    说到有关dllimport方法可能还有很多人比较陌生,其实我自己也说不太清楚,大概说说什么时候要用它. 事实上功能类似于调用android的第三包,我们想要使用苹果上特定的api或者第三方平台的一些东 ...