mysql随机查看多条数据(mysql随机查看5条数据,mysql随机查看10条数据……)

博客给出四种MySQL查询方法,按效率由慢到快排列。测试数据总量41万+,方法一一次查5条,耗时455.596s;方法二每次查1条,执行5次,耗时214.54s;方法三是方法二改良版,耗时0.151s;方法四比方法三更快,join比子查询效率高。最后提到此类问题可考察数据库知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下边给出四种方法,由慢到快,方法四最效率。

测试背景:
数据总量41万+

方法一:

这种方法可以一次查询5条,执行速度455.596s

SELECT * FROM `table` ORDER BY RAND() LIMIT 5

 

方法二:

这种方法如果limit5的话将会是连续的五条,所以这里是limit1,为了实现目的可以执行5次,执行速度214.54s

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

方法三:

方法二改良版,执行速度0.151s,有没有发现速度飞快,是因为索引问题,虽然两条主要sql最终都是查询了1条记录,但是方法二中的子查询部分索引失效了。

SELECT * FROM `table` 
WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM `table`)))  
ORDER BY id LIMIT 1;

 

方法四:

可以看到比方法三要快,这么看join要比子查询效率高

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

总结:

从这一个问题就能考察出应聘人员数据库方面的很多知识,所以有实力的面试官所提出的问题还是认真考虑一下,如果能考明白对自己的提升还是有的,最次也能巩固一下自己所学的知识。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值