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