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即可。


版权声明:本文为IT_guoguo原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。