bitscn.com
mysql的order by rand()优化
我们都知道,mysql里用到order by rand()在数据量比较多的时候是很慢的,因为会导致mysql全表扫描,故也不会用到索引,
所以order by rand()用来随机时已经是到禁区里了,所以我们应该尽量避免使用order by rand()才对,所以这个是需要用其他方法替代或者优化才行。
当我们随机一条数据时可以考虑一下:
[php] $dbi=new dbi2($__dbserver); $num=$dbi->result('select count(1) as num from article');//获取总条数,数据库引擎为myisam采用吧 $num=$num[0]['num']-1; $num=rand(1, $num); $list=$dbi->result('select id from acticle order by viewcount desc limit ?,1',$num);//利用limit
随机多条数据时,为了避免全表扫描,可以取出一小部分在随机,这个随机性会落在一个小范围内:
[php] $dbi=new dbi2($__dbserver); //在200条范围内取10条随机 $list=$dbi->result('select id from (select id from acticle order by viewcount desc limit ?)x order by rand() limit ?',200,10);
bitscn.com