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);