怎样进行ThinkPHP中网站性能优化研究
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这期内容当中小编将会给大家带来有关怎样进行ThinkPHP中网站性能优化研究,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。轻易不要用多表查询,如下代码以及模拟数据测
千家信息网最后更新 2026年11月02日怎样进行ThinkPHP中网站性能优化研究
这期内容当中小编将会给大家带来有关怎样进行ThinkPHP中网站性能优化研究,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
轻易不要用多表查询,如下代码以及模拟数据测试结果能让你清晰地认识到多表查询,join,left join,inner join的可怕之处,能不用就不要用
/** * 获取持有偶像币总估值 * @param $uid * @return mixed * @author zzl zzl@ourstu.com * 时间:2019.06.18 */ public function getHasCoinExpect($uid){ $tag='_User_total_tnk_'.$uid; $total=S($tag); if($total===false){ $total=0; //获取持有偶像币估值 $page=1;//分页查询,防止某个用户拥有太多种偶像币,如管理员 $row=5000; do{ //测试idol_coin_has表40W条记录,用户10W条记录,单次循环耗时0.1s左右 $idol_has_list=$idol_uids=$idol_price_list=array(); $price=$has_num=0; $idol_has_list=$this->where(array('uid'=>$uid,'has_num'=>array('gt',0)))->page($page,$row)->order('has_num desc,idol_uid asc')->getField('idol_uid,has_num'); $idol_uids=array_keys($idol_has_list); $idol_price_list=D('Idol/Idol')->where(array('uid'=>array('in',$idol_uids),'single_price'=>array('gt',0),'status'=>1))->getField('id,uid,single_price');//这里增加single_price字段,初始化时为0,有交易时改变 foreach ($idol_price_list as $vo){ $price=$vo['single_price']; $has_num=$idol_has_list[$vo['uid']]; $total=bc_add(bc_mul($has_num,$price,4),$total,4); } unset($vo); $page++; }while(count($idol_has_list)==$row); S($tag,$total,60); //测试idol_coin_has表40W条记录,要查询用户的偶像币持有条数有10W条记录,总耗时1.5~2.5s之间 } return $total; //如下注释方案,采用inner join方式 测试idol_coin_has表40W条记录,用户10W条记录,直接崩溃,无响应,所以舍弃该方案 /*if(1||$total===false){ $total=0; //获取持有偶像币估值 $page=1;//分页查询,防止某个用户拥有太多种偶像币,如管理员 $row=500; G('d'); $sql="select table1.uid,table1.idol_uid,table1.has_num,table2.single_price from __PREFIX__idol_coin_has as table1 inner join __PREFIX__idol_info as table2 on table1.uid={$uid} AND table1.has_num>0 AND table2.single_price>0 AND table1.idol_uid = table2.uid ORDER BY table1.has_num desc,table2.single_price desc "; do{ G('a'); $sql_do=$sql."limit ".($page-1)*$row.",".$row; $list=$this->query($sql_do); foreach ($list as $val){ $total=bc_add(bc_mul($val['has_num'],$val['single_price'],4),$total,4); } unset($val); dump($total); dump($page); $page++; G('b'); dump(G('a','b')); }while(count($list)==$row); dump('e'); dump(G('d','e'));exit; S($tag,$total,60); }*/ }对于大批量的操作,千万不要在foreach中出现sql查询,如下代码:
一条一条save的方案,每条操作都要0.01s左右,10W条的话,需要100s,是当前方案耗时的10倍,所以这里采用删除老记录,批量新增新记录的方式操作
/** * 重新计算排名 * @return boolean * @author 郑钟良(zzl@ourstu.com) * @date slf */ private function _calculateRanking() { $heatModel=D('idol_heat'); $map['status']=1; $order='heat desc,uid asc'; $page=1; $row=5000; $rank=1; $this->startTrans(); do{ //用9W条数据测试,如果每条都需要改,单次循环需要0.55s,全部执行完需要11s左右 //用9W条数据测试,如果有1W条数据需要改,单次循环需要0.15s,全部执行完需要3s左右 //实际使用环境中,每次改变不会超过十分之一,而且总用户量很难达到10W,所以,该方案可行 $heatList=$heatModel->where($map)->order($order)->page($page,$row)->select(); $rank_list=$del_ids=array(); foreach ($heatList as $val){ if($val['last_rank']!=$val['rank']||$val['change_rank']!=$rank-$val['rank']||$val['rank']!=$rank){ $val['last_rank']=$val['rank']; $val['change_rank']=$rank-$val['rank']; $val['rank']=$rank; $rank_list[]=$val; $del_ids[]=$val['uid']; } $rank++; } unset($val); if(count($del_ids)){ //一条一条save的方案,每条操作都要0.01s左右,10W条的话,需要100s,是当前方案耗时的10倍,所以这里采用删除老记录,批量新增新记录的方式操作 $res=$heatModel->where(array('uid'=>array('in',$del_ids)))->delete(); $res1=$heatModel->addAll($rank_list); }else{ $res=1; $res1=1; } if(!$res||!$res1){ break; } $page++; }while(count($heatList)==$row); if($res&&$res1){ if($this->commit()){ return true; } }else{ $this->rollback(); } return false; }上述就是小编为大家分享的怎样进行ThinkPHP中网站性能优化研究了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
方案
偶像
用户
查询
测试
数据
估值
方式
循环
性能
网站
研究
代码
内容
多种
新记录
管理员
老记
分析
管理
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技公司简介
互联网科技公司起名
互联网科技工作委员会
中关村互联网科技集团
科技创新与互联网经济
互联网科技有限公司图片
善班互联网科技
成都互联网科技公司
壕鑫互联网络科技
亿人帮互联网科技
顺网科技2021年互联网排名
阿大互联网科技有限公司
崇明区互联网教育科技售后服务
互联网行业科技股
张召忠谈中国互联网科技
抖集互联网科技技术咨询
西安左小互联网科技有限公司
同城互联网络科技
科技互联网经济论坛
小牛互联网科技有限公司地址
广州万易互联网科技有限公司
中关村互联网 科技集团
互联网金融科技创新
深圳天众互联网科技公司
科技类的互联网平台
互联网企业科技类企业如何做账
卡尔迅互联网科技有限公司
互联网时代科技型公司的机会
长沙易易互联网科技有限公司
互联网科技快速发展优美句子