Mysql数据库随机获取n条数据的实操记录

本文探讨了MySQL中使用RAND()函数与利用自增ID进行随机取样100条数据的时间效率和随机性差异,指出第二种方法虽然效率高但随机程度较低。

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

一般来说从数据库中随机获取n条数据都会使用到RAND()函数。MySQL中的RAND()函数用于返回范围0 <= V <1.0的随机浮点值V。

以下通过一张主键id为自增的10w数据的数据表来测试。

最直接的使用就是一下这种方式:

SELECT * FROM `table_name` ORDER BY RAND() LIMIT 1;

在单表数据10w的情况下,随机获取1条需要耗时 0.037s:

而随机获取100条则同样需要耗时 0.037s:

 查询出来的数据也确实是随机分布的,而且随机程度非常高:

但是如果通过主键是自增的这个特性,我们可以将上面的sql语句改写为:

SELECT * FROM `table_name` WHERE t1.id>=(RAND()*(SELECT MAX(id) FROM `table_name`))LIMIT 1;

 在单表数据10w的情况下,随机获取1条仅需要耗时 0.001s:

而随机获取100条则只需要耗时 0.002s:

 查询出来的数据也是随机分布的,但是随机的程度不高,10w条数据随机取100条数据经过多次执行,结果最大的id都不超过5000:

 

 总结:

按照随机的效率来说,第二种远超过第一种,但是按照随机程度来说,第一种的随机程度会更高。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值