`
小网客
  • 浏览: 1241308 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mysql之rand()随机取数

    博客分类:
  • DB
 
阅读更多

需求:

随机读取表的一条记录

数据准备:

1.表结构

mysql> desc tb_random;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(200) | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+

数据量:百万

 

实现:

1.基于rand()

SELECT * FROM tb_random   ORDER BY rand() LIMIT 1; 

2.基于随机id取值,借助rand()和FLOOR()

SELECT * FROM tb_random WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM tb_random ) ORDER BY id LIMIT 1;  

性能可以通过explain来看执行计划:

explain SELECT * FROM tb_random   ORDER BY rand() LIMIT 1 \G;  

结果:

*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: tb_random
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 15995114
        Extra: Using temporary; Using filesort
1 row in set (0.00 sec)

结论:没有采用索引

 

第二种方案:

explain SELECT * FROM tb_random WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM tb_random ) ORDER BY id LIMIT 1 \G;  

结果:

*************************** 1. row ***************************
           id: 1
  select_type: PRIMARY
        table: tb_random
         type: index
possible_keys: NULL
          key: PRIMARY
      key_len: 4
          ref: NULL
         rows: 1
        Extra: Using where
*************************** 2. row ***************************
           id: 2
  select_type: UNCACHEABLE SUBQUERY
        table: tb_random
         type: index
possible_keys: NULL
          key: PRIMARY
      key_len: 4
          ref: NULL
         rows: 15995114
        Extra: Using index
2 rows in set (0.00 sec)

结论:using index

 

PS:

mysql函数 写道
floor:函数只返回整数部分,小数部分舍弃。
round:函数四舍五入,大于0.5的部分进位。

  

 

 

1
2
分享到:
评论

相关推荐

    MYSQL随机抽取查询 MySQL Order By Rand()效率问题

    在MySQL中,随机抽取查询是常见的需求,但使用`ORDER BY RAND()`往往会导致效率低下,尤其是在处理大数据量的表时。这是因为`RAND()`函数在`ORDER BY`子句中会被执行一次对应于每一行的数据扫描,这使得全表扫描成为...

    MySQL中的RAND()函数使用详解

    MySQL中的RAND()函数是一个非常实用的工具,尤其在需要生成随机数据或者进行随机排序的时候。这个函数能够生成0到1之间的浮点数,包括0但不包括1。它有两种主要的使用方式,一种是没有参数的调用,另一种是带有整数...

    mysql生成指定位数的随机数及批量生成随机数的方法

    RAND() 随机生成 0~1 之间的小数(0<1) CEILING 向上取整 FLOOR 向下取整 2. 生成随机数 -- 生成 3 位的随机数 SELECT CEILING(RAND()*900+100); -- 生成 4 位的随机数 SELECT CEILING(RAND()*9000+1000);...

    MySql分组后随机获取每组一条数据的操作

    在MySQL数据库中,有时我们需要对数据进行分组处理,并从每个分组中随机选取一条记录。这在统计分析或者抽样调查等场景中非常常见。本文将详细介绍如何在MySQL中实现这一操作,以及一些关于随机选取数据的优化方法。...

    php随机取mysql记录方法小结

    这是最常见的一种方法,通过在SQL查询语句中使用`ORDER BY RAND()`来对查询结果进行随机排序,然后利用`LIMIT`限制返回的记录数量。例如,如果想要从`tablename`表中随机获取一条记录,可以使用以下代码: ```php $...

    mysql优化取随机数据慢的方法

    这里我是直接使用mysql rand by函数来直接,几千条记录没关系,但如果到了几万条感觉要几秒,这个就很慢了,下面小编与大家一起来看看mysql 取随机数据慢优化过程。MySQL很多时候需要获取随机数据,举个例子,要从...

    JAVA主键随机+SELECT联动+数据库随机取数+F5刷新+字符编码乱码

    这可以通过编写SQL查询来实现,比如使用`RAND()`函数结合`LIMIT`子句在MySQL中随机选择记录。 4. **F5刷新**:在开发过程中,F5通常是刷新浏览器页面的快捷键,这可能意味着在实时查看和测试网页应用时,开发者会...

    mysql表数据定时随机生成.txt

    temperature = ROUND (3.0 + (RAND() * 1.0),1), humidity =ROUND (75.0 + (RAND() * 1.0),1), noise =ROUND(25.0 + (RAND() * 45.0),1), pm = ROUND(8.0 + (RAND() * 5.0),1), wind_speed...

    MySQL 随机函数获取数据速度和效率分析

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

    mysql随机查询若干条数据的方法

    一个15万余条的库,查询5条数据,居然要8秒以上搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据。 代码如下:SELECT * FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table...

    mysql中RAND()随便查询记录效率问题和解决办法分享

    最近由于需要大概研究了一下MYSQL的随机抽取实现方法。举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1。 有两个方法可以达成以上效果. 1.新建...

    mysql获取随机数据的方法

    在MySQL中,获取随机数据是常见的需求,尤其是在测试、数据分析或者构建某些特定功能时。本文将探讨两种常用的方法,以及如何根据数据量和需求选择合适的方法。 方法一:使用`ORDER BY RAND()`函数 `ORDER BY RAND...

    MySQL 随机查询数据与随机更新数据实现代码

    MySQL的rand()函数在手册里是这么说的: RAND() RAND(N) 返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。 关于MySQL的rand()函数的效率问题,大家可以参考《MySQLL Order By Rand()效率...

    从MySQL数据库表中取出随机数据的代码

    MySQL 如何从表中取出随机数据  以前在群里讨论过这个问题,比较的有意思.mysql的语法真好玩. 他们原来都想用PHP的实现随机,但取出多条好像要进行两次以上查询. 翻了手册,找到了下面这个语句,可以完成任务了 ...

    php 随机记录mysql rand()造成CPU 100%的解决办法

    在PHP和MySQL开发中,有时候为了实现某些功能,如展示随机推荐内容,我们可能会使用`RAND()`函数从数据库中抽取随机记录。然而,当数据库表中的数据量非常大时(例如10万条以上),使用`RAND()`函数可能会引发性能...

Global site tag (gtag.js) - Google Analytics