mysql随机获取N条数据 高效率解决方案

一、测试场景

我本地最大的表就是登录记录表了,大概300W+条数据。下面我将在此表中测试两种方法的性能

二、传统方法

SELECT * FROM user_login_record  ORDER BY RAND() LIMIT 1000

经过测试,这种方法 直接导致服务器卡顿,mysql连接超时

三、解决方案
SELECT * FROM user_login_record WHERE id >= (SELECT FLOOR(RAND() * (SELECT MAX(id) FROM user_login_record))) ORDER BY id LIMIT 1000

实测300W+条数据中随机1000条,仅需0.2S
说明:
rand函数返回0和1之前的随机数,然后再乘当前表中最大的id,向下取整后,最后用id大于或等于这个数在 order by 排序,再limit即可。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值