工作中会遇到从数据库中随机获取一条或多条记录的场景,下面介绍几种随机获取的方法供参考。 表中存放30万记录。
1、使用order by rand()
SELECT * FROM users ORDER BY RAND() LIMIT 1;
LIMIT 1的执行时间:0.559s, LIMIT 100 耗时0.660s。
此种方法在数据量小的情况下可以使用,但在生产环境不建议使用。
MYSQL手册里面针对RAND()的提示大概意思就是,在 ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描,导致效率相当相当的低,效率不行,切忌使用。
2、使用join及rand()函数
SELECT * FROM users AS t1 JOIN (SELECT ROUND(RAND()*(SELECT MAX(id)
FROM users)) AS id) AS t2 WHERE t1.id>=t2.id ORDER BY t1.id LIMIT 1;
此sql随机获取一条的时间是0.014s,LIMIT 100时耗时 0.020s,性能上没差多少。
获取多条的话有时会达不到要求(获取的记录数可能达不到多条)
3、子查询及rand()函数
SELECT * FROM users as t1 WHERE t1.id>=(RAND()*(SELECT MAX(id) FROM users)) LIMIT 1;
随机去一条的耗时:0.015,LIMIT 100时耗时 0.026s。
随机获取一条记录推荐使用 第2种方法,在30万条记录时也只需0.014s。
本文胡金金个人网站2021年3月31日整理发布
转载注明:http://m.hujinjin.com/info/17368.html