`
小网客
  • 浏览: 1217169 次
  • 性别: 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生成指定位数的随机数及批量生成随机数的方法

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

    php随机取mysql记录方法小结

    本文实例总结了php随机取mysql记录方法。...把 limit 后面的数值改为你想随机抽取的条数,这里只取一条. 方法二,代码如下: 复制代码 代码如下:$query= “SELECT count(*) as count FROM recommends”; …

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

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

    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随机查询若干条数据的方法

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

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

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

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

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

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

    但是在MYSQL 3.23版本中,仍然可以通过ORDER BY RAND()来实现随机。 但是真正测试一下才发现这样效率非常低。一个15万余条的库,查询5条数据,居然要8秒以上。查看官方手册,也说rand()放在ORDER BY 子句中会被执行...

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

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

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

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

    MySQL查询随机数据的4种方法和性能对比

    原因是因为MySQL会创建一张零时表来保存所有的结果集,然后给每个结果一个随机索引,然后再排序并返回。有几个方法可以让它快起来。基本思想就是先获取一个随机数,然后使用这个随机数来获取指定的行。由于所有的行...

    MySQL rand函数实现随机数的方法

    顺便给你找了点关于mysql rand函数的实例,如下:那就在insert 命令中,value()里面用rand(),注意字段宽度是否够一直以为mysql随机查询几条数据,就用SELECT * FROM `table` ORDER BY RAND() LIMIT 5 就可以了。

    MySQL中随机生成固定长度字符串的方法

    要随机生成字符串代码如下: 在MySQL中定义一个随机串的方法,然后再SQL语句中调用此方法。 随机串函数定义方法: 代码如下: CREATE DEFINER=`root`@`localhost` FUNCTION `rand_string`(n INT) RETURNS varchar(255...

    MySQL取出随机数据

    他们原来都想用PHP的实现随机,但取出多条好像要进行两次以上查询. 翻了手册,找到了下面这个语句,可以完成任务了,但效率较低 SELECT * FROM table_name ORDER BY rand() LIMIT 5;...mysql> select RAND(20)

    MySQL Order By Rand()效率分析

    最近由于需要大概研究了一下...但是在MYSQL 3.23版本中,仍然可以通过ORDER BY RAND()来实现随机。 但是真正测试一下才发现这样效率非常低。一个15万余条的库,查询5条数据,居然要8秒以上。查看官方手册,也说rand

    MySQL的指定范围随机数函数rand()的使用技巧

    而在mysql里,随机数函数rand不能传参,产生的0到1之间的浮点数,要是我们需要在mysql产生大于1的随机整数,该怎么办呢? 这样的需求并不陌生,例如,咱做的文章系统,需要作弊,给文章的浏览量随机加上某个范围内的...

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

    MySQL随机查询出一条记录: 代码如下: — 下面的查询语句效率高,不要使用 SELECT * FROM table1 ORDER BY rand() LIMIT 1 来查询 SELECT * FROM table1 WHERE id=(SELECT id FROM table1 ORDER BY rand() LIMIT 1)...

Global site tag (gtag.js) - Google Analytics