mysql的ORDER BY RAND()優化

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

 

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *