程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql的ORDER BY RAND()優化

mysql的ORDER BY RAND()優化

編輯:MySQL綜合教程

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

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved