日期:2014-05-16  浏览次数:20722 次

Mysql利用随机取N条记录的方法
select SQL_NO_CACHE  cid,account,country,companyname 

FROM f_company as c 

JOIN (select ROUND(rand() * ((SELECT MAX( cid ) 

FROM f_company))) as id) AS T 

where c.cid >= T.id limit 10 

?

直接上代码,留作记录,怕以后忘掉。网上很多的那种order by rand(),效率很差,就不讨论了。这种方法是网上看到的,自己测了一下效果还可以。

?

废话一下:
SELECT MAX( cid ) FROM f_company 语句取出f_company表中cid最大的记录
随机浮点数rand()与上面得到的最大cid相乘,结果再取整(该记录即为随机数)
where条件中 c.cid >= T.id 得到cid大于该随机数的所有记录,然后加limit 10
即得到最终想要的10条随机记录.

在我目前的环境,80万记录的f_company表(约780M)查询用时在0.006秒到0.016秒之间,可以接受。