从mysql表中随机取出几行数据

时间:2021-11-01 18:29:14

select * from a order by rand() limit m,n;

上面这句话可以随机取出n条记录。但是效率非常差。

有两种解决方法。

第一、从根源上去解决。如果一定要随机取出n条记录,可以:

1、取出表总条数n

2、在应用程序中生成n个随机数(区间在0到n-1)

3、去数据库中把这些记录取出来

【这种方法思路上是存在缺陷的:如果生成的id在数据库中不存在...就...思密达了】

第二、优化mysql查询语句

搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据。

SELECT *
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id ASC LIMIT 5;

但是这样获得的是5条连续的记录。解决办法只能是每次查询一条,查询5次。【个人感觉这种方法比较好】

参考:这里