如何改进MySQL Order By Rand()
作者:linux120 发布时间:February 26, 2014 分类:服务器配置
mysql数据库的随机函数很消耗资源的,官方也不建议在order中使用rand(),客户在150w条的表里面进行查询15条,耗费1.5s,
SELECT * FROM items ORDER BY RAND() LIMIT 15
大量堵塞了mysql进程,下面分享一下我司dba给出的解决方案,使用该方案后随机查询15条数据耗费0.001s。不用谢。
$sql="SELECT MAX(id),MIN(id) FROM items ";
$result=mysql_query($sql,$conn);
$yi=mysql_fetch_array($result);
$idmax=$yi[0];
$idmin=$yi[1];
$idlist='';
for($i=1;$i<=20;$i++){
if($i==1){ $idlist=mt_rand($idmin,$idmax); }
else{ $idlist=$idlist.','.mt_rand($idmin,$idmax); }
}
$idlist2="id,".$idlist;
$sql="select * from items where id in ($idlist) order by field($idlist2) LIMIT 0,15";
$result=mysql_query($sql,$conn);
$n=1;
$rnds='';
while($row=mysql_fetch_array($result)){
$rnds=$rnds.$n.". ".$row['title']."
\n";
$n++;
}