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

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次。【个人感觉这种方法比较好】

参考:这里

 

阅读更多
个人分类: mysql
上一篇MySql中常用的hint
下一篇MySql批量drop table
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭