php+mysql优化
这段代码在mysql里有45万条数据,执行时间太长,有没办法优化?
$mod1 = array('134','135','136','137','138','139','147','187','188','182','150','151','152','157','158','159');
$mod2 = array('130','131','132','155','156','185','186');
$mod3 = array('133','153','189','180');
$ali = 0;
$query = DB::query("SELECT mobile FROM ".DB::table('common_member_profile')." WHERE mobile!='' ");
while($val = DB::fetch($query)) {
$ali = $ali+1;
$lim1 = strlen($val[mobile])<11 ? $lim1+1 : $lim1;
if(strlen($val[mobile])>10){
$obl = substr($val[mobile],0,3);
$yid = in_array($obl,$mod1) ? $yid+1 : $yid ;
$liant = in_array($obl,$mod2) ? $liant+1 : $liant ;
$dxin = in_array($obl,$mod3) ? $dxin+1 : $dxin ;
//if(in_array($obl,$mod1)){$yid=$yid+1;}
//if(in_array($obl,$mod2)){$liant=$liant+1;} 用if比三元慢点
//if(in_array($obl,$mod3)){$dxin=$dxin+1;}
}
}
$qit = ($ali-$lim1)-($yid+$liant+$dxin);
$bbf = $ali-$lim1;
$yidb = round(($yid/$bbf)*100,2);
$liantb = round(($liant/$bbf)*100,2);
$dxinb = round(($dxin/$bbf)*100,2);
$qitb = round(($qit/$bbf)*100,2);
$mail = array('1'=>'gmail.com','2'=>'yahoo.com','3'=>'msn.com','4'=>'hotmail.com','5'=>'aol.com','6'=>'live.com','7'=>'yeah.net','8'=>'googlemail.com','9'=>'mail.com','10'=>'126.com','11'=>'163.com','12'=>'sina.com','13'=>'sina.cn','14'=>'21cn.com','15'=>'sohu.com','16'=>'yahoo.com.cn','17'=>'tom.com','18'=>'qq.com','19'=>'etang.com','20'=>'eyou.com','21'=>'56.com','22'=>'chinaren.com','23'=>'sogou.com','24'=>'wo.com.cn','25'=>'189.cn','26'=>'139.com','27'=>'163.net','28'=>'263.net','29'=>'100.com','30'=>'其他');
$query = DB::query("SELECT email FROM ".DB::table('ucenter_members')." ");
while($val = DB::fetch($query)) {
$mai = explode('@',$val[email]);
$a = array_keys($mail,$mai[1]);
if($a[0]=="" || $a[0]<1 || $a[0]>29){$a[0]=30;}
$ma[$mail[$a[0]]] = $ma[$mail[$a[0]]]+1;
}
$mais = array();
foreach($mail as $val){
$mais[] = $val;
}