一、测试场景
我本地最大的表就是登录记录表了,大概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即可。