mysql 随机选取一条记录 - rand() 坑

要从tablename表中随机提取一条记录,大家一般的写法就是:

SELECT * FROM tablename ORDER BY RAND() LIMIT 1。

RAND() 函数返回的是一个小于1的随机数

但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。

但是真正测试一下才发现这样效率非常低。一个15万余条的库,查询5条数据,居然要8秒以上
修改写法后

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

这下,效率提高了,查询时间只有0.01秒
完成收工
个人微信 :yx159337
欢迎一起探讨

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容