首页 > 数据库技术 > 详细

MySQL实现随机查询

时间:2019-01-12 18:26:19      阅读:29      评论:0      收藏:0      [点我收藏+]

标签:rand()   说明   order   第一个   sql   一行   随机数   使用   获取   

方法一:
SELECT * FROM table ORDER BY RAND() LIMIT 1;
评价:不建议使用,效率非常低,官方文档中进行说明:Order By和RAND()连用,会多次扫描表,导致速度变慢。

方法二:
SELECT * FROM table
    WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM table)))
    ORDER BY id LIMIT 1;
思路:先查询出table中的id的最大值,然后再获取一个小于此值的随机数,然后将满足条件的行都选出来,取第一个;
评价:有问题。如果id不是从0开始的话,比如从10000开始自增,那么SELECT floor (RAND() * (SELECT MAX(id) FROM table)) 将会很大概率得到小于10000的值,经过WHERE限定的查询结果将会是所有的查询结果的几率变大,最后LIMIT 1获取的是第一行数据的几率变高。

方法三:
SELECT * FROM table
    WHERE id >= (SELECT floor (RAND() * ((SELECT MAX(id) FROM table) - (SELECT MIN(id) FROM table)) + (SELECT MIN(id) FROM table)))
    ORDER BY id LIMIT 1;
方法四:
SELECT *
FROM table AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM table) - (SELECT MIN(id) FROM table)) + (SELECT MIN(id) FROM table)) AS id ) AS t2
    WHERE t1.id >= t2.id
    ORDER BY t1.id LIMIT 1;
评价:解决了方法二中MAX(id)的问题,可以获取MAX(id)和MIN(id)中的随机数。

MySQL实现随机查询

标签:rand()   说明   order   第一个   sql   一行   随机数   使用   获取   

原文:https://www.cnblogs.com/yuanfei1110111/p/10260521.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 designnerd.net 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

鲁公网安备 37021202000002号