需求:
随机读取表的一条记录
数据准备:
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的部分进位。
round:函数四舍五入,大于0.5的部分进位。
相关推荐
在MySQL中,随机抽取查询是常见的需求,但使用`ORDER BY RAND()`往往会导致效率低下,尤其是在处理大数据量的表时。这是因为`RAND()`函数在`ORDER BY`子句中会被执行一次对应于每一行的数据扫描,这使得全表扫描成为...
MySQL中的RAND()函数是一个非常实用的工具,尤其在需要生成随机数据或者进行随机排序的时候。这个函数能够生成0到1之间的浮点数,包括0但不包括1。它有两种主要的使用方式,一种是没有参数的调用,另一种是带有整数...
RAND() 随机生成 0~1 之间的小数(0<1) CEILING 向上取整 FLOOR 向下取整 2. 生成随机数 -- 生成 3 位的随机数 SELECT CEILING(RAND()*900+100); -- 生成 4 位的随机数 SELECT CEILING(RAND()*9000+1000);...
在MySQL数据库中,有时我们需要对数据进行分组处理,并从每个分组中随机选取一条记录。这在统计分析或者抽样调查等场景中非常常见。本文将详细介绍如何在MySQL中实现这一操作,以及一些关于随机选取数据的优化方法。...
这是最常见的一种方法,通过在SQL查询语句中使用`ORDER BY RAND()`来对查询结果进行随机排序,然后利用`LIMIT`限制返回的记录数量。例如,如果想要从`tablename`表中随机获取一条记录,可以使用以下代码: ```php $...
这里我是直接使用mysql rand by函数来直接,几千条记录没关系,但如果到了几万条感觉要几秒,这个就很慢了,下面小编与大家一起来看看mysql 取随机数据慢优化过程。MySQL很多时候需要获取随机数据,举个例子,要从...
这可以通过编写SQL查询来实现,比如使用`RAND()`函数结合`LIMIT`子句在MySQL中随机选择记录。 4. **F5刷新**:在开发过程中,F5通常是刷新浏览器页面的快捷键,这可能意味着在实时查看和测试网页应用时,开发者会...
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中我们会有rand()函数,很多朋友都会直接使用,如果几百条数据肯定没事,如果几万或百万时你会发现,直接使用是错误的。下面我来介绍随机取数据一些优化方法。 SELECT * FROM...
一个15万余条的库,查询5条数据,居然要8秒以上搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据。 代码如下:SELECT * FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table...
最近由于需要大概研究了一下MYSQL的随机抽取实现方法。举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1。 有两个方法可以达成以上效果. 1.新建...
在MySQL中,获取随机数据是常见的需求,尤其是在测试、数据分析或者构建某些特定功能时。本文将探讨两种常用的方法,以及如何根据数据量和需求选择合适的方法。 方法一:使用`ORDER BY RAND()`函数 `ORDER BY RAND...
MySQL的rand()函数在手册里是这么说的: RAND() RAND(N) 返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。 关于MySQL的rand()函数的效率问题,大家可以参考《MySQLL Order By Rand()效率...
MySQL 如何从表中取出随机数据 以前在群里讨论过这个问题,比较的有意思.mysql的语法真好玩. 他们原来都想用PHP的实现随机,但取出多条好像要进行两次以上查询. 翻了手册,找到了下面这个语句,可以完成任务了 ...
在PHP和MySQL开发中,有时候为了实现某些功能,如展示随机推荐内容,我们可能会使用`RAND()`函数从数据库中抽取随机记录。然而,当数据库表中的数据量非常大时(例如10万条以上),使用`RAND()`函数可能会引发性能...