摘要:
下文讲述MySQL数据库中随机查询指定条数的方法分享,如下所示;
SELECT * FROM `tableName` ORDER BY RAND() LIMIT 8
以上脚本在一个20万条的数据表中,查询整整用了10秒以上,这种查询数据的效率是否低下
经过多方查询资料,发现采用以下方式,查询效率更加高效
SELECT * FROM `tableName` AS a JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `tableName`)) AS id) AS b
WHERE a.id >= b.id
ORDER BY a.id ASC LIMIT 8;
--此种方式可以达到快速查询数据的方法,但是弊端是可以快速的查询出数据,耗时页非常少0.01秒都不到,
--但是缺点是 是返回一个连续的数据
为了做到真真的随机数,我们可以运行下面的sql脚本进行多次运行
SELECT * FROM `tableName`
WHERE id >= select (FLOOR(RAND()*(SELECT MAX(id) FROM `tableName` )))
ORDER BY id LIMIT 1;
union all
SELECT * FROM `tableName`
WHERE id >= select (FLOOR(RAND()*(SELECT MIN(id) FROM `tableName` )))
ORDER BY id LIMIT 1;