MySQL随机获取数据的方法,支持大数据量

最近做项目,需要做一个从mysql数据库中随机取几条数据出来。
总所周知,order by rand 会死人的。。因为本人对大数据量方面的只是了解的很少,无解,去找百度老师。。搜索结果千篇一律。特发到这里来,供大家学习。

在mysql中带了随机取数据的函数,在mysql中我们会有rand()函数,很多朋友都会直接使用,如果几百条数据肯定没事,如果几万或百万时你会发现,直接使用是错误的。下面我来介绍随机取数据一些优化方法。

  1. SELECT * FROM table_name ORDER BY rand() LIMIT 5;

复制代码

rand在手册里是这么说的:
RAND()
RAND(N)
返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。

  1. mysql> select RAND();
  2. -> 0.5925
  3. mysql> select RAND(20);
  4. -> 0.1811
  5. mysql> select RAND(20);
  6. -> 0.1811
  7. mysql> select RAND();
  8. -> 0.2079
  9. mysql> select RAND();
  10. -> 0.7888

复制代码


不能在一个ORDER BY子句用RAND()值使用列,因为ORDER BY将重复计算列多次。然而在MySQL3.23中,你可以做: SELECT
* FROM table_name ORDER BY RAND(),这是有利于得到一个来自SELECT * FROM
table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT
1000的集合的随机样本。注意在一个WHERE子句里的一个RAND()将在每次WHERE被执行时重新评估。

网上基本上都是查询max(id) * rand()来随机获取数据。

  1. SELECT *
  2. FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2
  3. WHERE t1.id >= t2.id
  4. ORDER BY t1.id ASC LIMIT 5;

复制代码

但是这样会产生连续的5条记录。解决办法只能是每次查询一条,查询5次。即便如此也值得,因为15万条的表,查询只需要0.01秒不到。

上面的语句采用的是JOIN,mysql的论坛上有人使用

  1. SELECT *
  2. FROM `table`
  3. WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` )
  4. ORDER BY id LIMIT 1;

复制代码

我测试了一下,需要0.5秒,速度也不错,但是跟上面的语句还是有很大差距
后来请教了baidu,得到如下代码
完整查询语句是:

  1. SELECT * FROM `table`
  2. WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`)) + (SELECT MIN(id) FROM `table`)))
  3. ORDER BY id LIMIT 1;

复制代码

  1. SELECT *
  2. FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`))+(SELECT MIN(id) FROM `table`)) AS id) AS t2
  3. WHERE t1.id >= t2.id
  4. ORDER BY t1.id LIMIT 1;

复制代码

最后在php中对这两个语句进行分别查询10次,
前者花费时间 0.147433 秒
后者花费时间 0.015130 秒

执行效率需要0.02 sec.可惜的是,只有mysql 4.1.*以上才支持这样的子查询.
注意事项 查看官方手册,也说rand()放在ORDER BY 子句中会被执行多次,自然效率及很低。

以上的sql语句最后一条,本人实际测试通过,100W数据,瞬间出结果。

时间: 2024-07-30 13:49:41

MySQL随机获取数据的方法,支持大数据量的相关文章

mysql 随机获取一条或多条数据

若要在i ≤r≤ j 这个范围得到一个随机整数r ,需要用到表达式 FLOOR( RAND() * (j – i)+i),RLOOR()取整树部分,RAND().ROUND(x,n)四舍五入取整,ROUND(x,n)表示随机生成一个 0~x 之间的n位小数的数字. 例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机整数, 可使用以下语句: SELECT  FLOOR(RAND()*(12-7)+7) 从 Mysql 表中随机读取数据不难,方法还挺多的,但是如果要考虑效率,得到一个快

mysql随机获取一条或者多条数据

原文地址:http://www.im286.com/thread-7091552-1-1.html 转来备份 研究一些随机的因素,主要是讲究效率问题. 语句一: select * from users order by rand() LIMIT 1 MYSQL手册里面针对RAND()的提示大概意思就是,在 ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描,导致效率相当相当的低,效率不行,切忌使用. ---------分隔线---------------------

NLPIR语义智能平台支持大数据个性化学习

随着计算机技术的革新,互联网新媒体的快速发展,人们的生活已经进入高速信息时代.我们每天的生活都要产生大量数据,因此我们获取数据的速度和规模不断增长,大量数据不断的被存入存储介质中形成海量数据. 数据挖掘是从存放在数据库.数据仓库或者其他信息库中大量的不完全的有噪声的模糊的随机的数据中提取隐含在其中的人们事先未知.但潜在有用的信息和知识过程.数据挖掘需要经历数据收集.数据分析和数据可视化等三个必要阶段: (一)数据收集 数据收集是挖掘大数据巨大价值的第一步.个性化学习往往因为片段化不全面的数据信息

ODI 12.1.3发布,提升支持大数据的能力

此次发布的ODI新版本,目的是更好的支持当前市场上的大数据平台. 大数据基因在不改变ODI工作效率的情况下,ODI增加了越来越多的数据源集成能力.ODI是在Oracle平台上标准的E-LT工具,事实上也是Oracle各个应用软件的数据集成工具.因此,与时俱进,增加对市场上当前流行数据源的集成是必然的,此次增加的有:1. 支持JSON2. 集成Hadoop SQOOP3. 集成HbaseODI现在支持在关系型数据库与HDFS, Hive, HBase之间相互导数.通过增强ODI的知识模块来来加强数

大数据知识点分享:大数据平台应用 17 个知识点汇总

一.大数据中的数据仓库和Mpp数据库如何选型? 在Hadoop平台中,一般大家都把hive当做数据仓库的一种选择,而Mpp数据库的典型代表就是impala,presto.Mpp架构的数据库主要用于即席查询场景,暨对数据查询效率有较高要求的场景,而对数据仓库的查询效率要求无法做大MPP那样,所以更多地适用与离线分析场景. Hadoop已经是大数据平台的实时标准,其中Hadoop生态中有数据仓库Hive,可以作为大数据平台的标准数据仓库, 对于面向应用的MPP数据库,可以选择MYCAT(mySql的

了解大数据开发及和大数据相关的技术

在现如今,随着互联网技术飞速的发展,目前有不少朋友询问关于大数据方面的问题,比如什么是大数据开发啊,和大数据相关的技术是什么呢等问题,我们今天就浅谈一下大数据开发及和大数据相关的技术的问题. 浅谈大数据开发及和大数据相关的技术 大数据学习QQ群:716581014 首先,大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉.管理和处理的数据集合,是需要新处理模式才能具有更强的决策力.洞察发现力和流程优化能力的海量.高增长率和多样化的信息资产. 那么和大数据相关的技术有哪些?

什么是大数据?如何成为大数据的技术大牛?

其实大数据并不是一种概念,而是一种方法论.简单来说,就是通过分析和挖掘全量的非抽样的数据辅助决策.大数据可以实现的应用可以概括为两个方向,一个是精准化定制,第二个是预测.比如像通过搜索引擎搜索同样的内容,每个人的结果却是大不相同的.再比如精准营销.百度的推广.淘宝的喜欢推荐,或者你到了一个地方,自动给你推荐周边的消费设施等等. 目前市场对大数据相关人才的需求与日俱增,岗位的增多,也导致了大数据相关人才出现了供不应求的状况,从而引发了一波大数据学习的浪潮.大家可以先了解一下关于大数据相关的岗位分类

大数据学习|小白学习大数据需要满足这六个条件你就能学好大数据

有很多学习大数据的朋友,在初期学习时,通常会对如何学习而感到迷茫.我经常收到零基础的朋友关于如何入门.如何规划学习大数据.大数据的学习流程是什么的一些问题.今天我就粗浅的总结几点学习大数据方法. 大数据学习资料分享群119599574一.兴趣建立 兴趣是可以让一个人持续关注一个事物的核心动力,那么兴趣的培养就非常重要了.如果你把写程序单纯作为赚钱手段,久而久之疲劳感会越来越强,会给今后的工作和生活带来很大的压力. 那么如何建立起对大数据的兴趣呢? 相信大家都有自己的兴趣爱好,而大数据的应用恰恰非

大数据开发及和大数据相关的技术

在现如今,随着互联网技术飞速的发展,目前有不少朋友询问关于大数据方面的问题,比如什么是大数据开发啊,和大数据相关的技术是什么呢等问题,我们今天就浅谈一下大数据开发及和大数据相关的技术的问题. 首先,大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉.管理和处理的数据集合,是需要新处理模式才能具有更强的决策力.洞察发现力和流程优化能力的海量.高增长率和多样化的信息资产. 那么和大数据相关的技术有哪些? 1.云技术 大数据常和云计算联系到一起,因为实时的大型数据集分析需要分布式

当不再炒作大数据的时候,大数据时代就真的来了

从2015年开始,大数据就已经被移出了Gartner的新兴技术炒作曲线."Big Data"(大数据)一词最早于2011年8月出现在Gartner新兴技术炒作曲线中,当时Gartner预计大数据技术需要2年到5年才能进入企业的实际生产型应用中.从那以后,大数据就迅速被市场热炒,最终在2015年彻底在Gartner新兴技术炒作曲线中消失. 进入2016年,大数据已经进入了实际的企业生产应用,在切实推动企业向数字化转型.另一家市场调查公司IDC则强调,在未来5年中,全球的数据驱动型企业将获