`

oracle 中随机取数据的方法

阅读更多

oracle 中随机取数据的方法:

1.快速随机取数据(推荐使用):

select * from MEMBER sample(1) where rownum <= 10

2.随机取数据,较慢

select * from (
  select * from MEMBER order by dbms_random.value
) where rownum<=10

========原文========

最近在做系统时用到了随机抽取记录的问题;

     上网上查找了很多相关资料,发现了不同的方法及其差异。都是基于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)
     采样表扫描返回表中随机采样数据。
     这种访问方式需要在FROM语句中包含SAMPLE选项或者SAMPLE BLOCK选项.

     SAMPLE选项:
     当按行采样来执行一个采样表扫描时,Oracle从表中读取特定百分比的记录,并判断是否满足WHERE子句以返回结果。

     SAMPLE BLOCK选项:
     使用此选项时,Oracle读取特定百分比的BLOCK,考查结果集是否满足WHERE条件以返回满足条件的纪录.

      Sample_Percent:
      Sample_Percent是一个数字,定义结果集中包含记录占总记录数量的百分比。
      Sample值应该在[0.000001,99.999999]之间。

      主要注意以下几点:

      1.sample只对单表生效,不能用于表连接和远程表
      2.sample会使SQL自动使用CBO

分享到:
评论

相关推荐

    Oracle从表中随机抽取记录

    如何在Oracle数据表中随机抽取部分记录的方法

    Oracle里抽取随机数的多种方法

    本文以实例的方式来讲解如何抽取随机数的多种方法。

    随机获取oracle数据库中的任意一行数据(rownum)示例介绍

    对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀

    Oracle如何实现从特定组合中随机读取值

     一、利用DBMS_RANDOM.RANDOM函数随机生成数值,然后对数值进行取模,如果我们要在10个元素中随机读取的话,那我们需要对10进行取模。  二、再将取模后的值利用CASE WHEN语句与元素进行关联。  譬如,我有一个...

    数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)

    Oracle查询结果集,随机排序 代码如下:select * from table1 order by dbms_random.value(); MySQL随机查询出一条记录: 代码如下: — 下面的查询语句效率高,不要使用 SELECT * FROM table1 ORDER BY rand() LIMIT ...

    程序员的SQL金典6-8

     4.7 不从实体表中取的数据  4.8 联合结果集  4.8.1 简单的结果集联合  4.8.2 联合结果集的原则  4.8.3 UNION ALL  4.8.4 联合结果集应用举例 第5章 函数  5.1 数学函数  5.1.1 求绝对值  5.1.2 求指数  ...

    程序员的SQL金典7-8

     4.7 不从实体表中取的数据  4.8 联合结果集  4.8.1 简单的结果集联合  4.8.2 联合结果集的原则  4.8.3 UNION ALL  4.8.4 联合结果集应用举例 第5章 函数  5.1 数学函数  5.1.1 求绝对值  5.1.2 求指数  ...

    程序员的SQL金典4-8

     4.7 不从实体表中取的数据  4.8 联合结果集  4.8.1 简单的结果集联合  4.8.2 联合结果集的原则  4.8.3 UNION ALL  4.8.4 联合结果集应用举例 第5章 函数  5.1 数学函数  5.1.1 求绝对值  5.1.2 求指数  ...

    程序员的SQL金典3-8

     4.7 不从实体表中取的数据  4.8 联合结果集  4.8.1 简单的结果集联合  4.8.2 联合结果集的原则  4.8.3 UNION ALL  4.8.4 联合结果集应用举例 第5章 函数  5.1 数学函数  5.1.1 求绝对值  5.1.2 求指数  ...

    程序员的SQL金典.rar

     4.7 不从实体表中取的数据  4.8 联合结果集  4.8.1 简单的结果集联合  4.8.2 联合结果集的原则  4.8.3 UNION ALL  4.8.4 联合结果集应用举例 第5章 函数  5.1 数学函数  5.1.1 求绝对值  5.1.2 求指数  ...

    Java面试宝典2020修订版V1.0.1.doc

    20、从数据库中随机取50条 47 21、order by与group by的区别 47 22、commit在哪里会运用 47 23、行转列、列换行怎么转 48 24、什么是PL/SQL? 49 25、序列的作用 50 26、表和视图的关系 50 27、oracle基本数据类型 ...

    C#基类库(苏飞版)

    C#操作缓存的帮助类,实现了怎么设置缓存,怎么取缓存,怎么清理缓存等方法,只需要调用方法就可以实现 CookieHelper C#操作Cookie的帮助类,添加Cookie,删除Cookie,修改Cookie,清理Cookie SessionHelper C#...

    Sqlserver2000经典脚本

    基本方法.sql │ ├─第08章 │ │ 8.1.2 树形数据分级汇总示例.sql │ │ 8.1.3 树形数据编号重排的通用存储过程.sql │ │ 8.1.3 树形数据编号重排示例.sql │ │ 8.1.4 实现编码规则...

    asp.net知识库

    使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标...

    C#编程经验技巧宝典

    54 &lt;br&gt;0075 用回溯法找出n个自然数中取r个数的全排列 55 &lt;br&gt;0076 约瑟夫环问题 56 &lt;br&gt;0077 猴子选大王 57 &lt;br&gt;0078 如何判断IP是否正确 57 &lt;br&gt;0079 如何将小写金额转换为大写金额 57...

    java 面试题 总结

    如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 15、error和exception有什么区别? error 表示恢复不是...

    超级有影响力霸气的Java面试题大全文档

    如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 18、error和exception有什么区别?  error 表示恢复...

    mysql数据库my.cnf配置文件

    # MySQL每打开一个表,都会读入一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才会去磁盘上读取。默认值64 # 假定系统有200个并发连接,则需将此参数设置为200*N(N为每个连接所需的文件...

    JAVA上百实例源码以及开源项目源代码

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    经典SQL语句大全

    15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.) select a,b,c from tablename ta where a=(select max(a) from ...

Global site tag (gtag.js) - Google Analytics