看如下代码:
php</code><code>$bankroll = $this->sgoods_bankroll->order('sb_id desc')->limit(50)->select();
foreach ($bankroll as $k=>&$v) {
$sl_id = $this->bankrollpop_relations->where(array('br_sb_id'=>$v['sb_id']))->getField('br_sl_id');
$v['dang_name'] = $this->settlementpop_list->where(array('sl_id'=>$sl_id))->getField('sl_schedule_name');
}
首先查询一个列表,然后foreach这个列表每条记录,再执行两次查询,一次去relations关联表找另一个表的关联字段,一次根据这个关联字段查询表另一个字段。
如果每次foreach查两次数据库的话,那整个下来不是查几百次数据库,这样是不是效率很低,一般这种情况可以怎么优化查询逻辑?
Hishop.5.2.BETA2版主要更新: [修改] 进一步优化了首页打开速度 [修改] 美化了默认模板 [修改] 优化系统架构,程序标签及SQL查询效率,访问系统页面的速度大大提高 [修改] 采用了HTML模板机制,实现了前台模板可视化编辑,降低模板制作与修改的难度. [修改] 全新更换前后台AJAX技术框架,提升了用户操作体验. 店铺管理 [新增] 整合TQ在线客服 [修改] 后台广告位增加
0
看如下代码:
php</code><code>$bankroll = $this->sgoods_bankroll->order('sb_id desc')->limit(50)->select();
foreach ($bankroll as $k=>&$v) {
$sl_id = $this->bankrollpop_relations->where(array('br_sb_id'=>$v['sb_id']))->getField('br_sl_id');
$v['dang_name'] = $this->settlementpop_list->where(array('sl_id'=>$sl_id))->getField('sl_schedule_name');
}
首先查询一个列表,然后foreach这个列表每条记录,再执行两次查询,一次去relations关联表找另一个表的关联字段,一次根据这个关联字段查询表另一个字段。
如果每次foreach查两次数据库的话,那整个下来不是查几百次数据库,这样是不是效率很低,一般这种情况可以怎么优化查询逻辑?
有个办法就是先foreach一遍得到所有的ids,去relations表一次查出关联的其他表的id,再根据这些id去查询一次,得到一个数组,再foreach数组拼装数据,细节不好描述,大致过程就是这样,不知道这样好不好。大家开发遇到这类问题怎么优化的?
继续补充
$sb_ids = $this->sgoods_bankroll->order('sb_id desc')->limit(50)->getField('sb_id',true);
$sb_ids = implode(',',$sb_ids);//所有sb_id
$where['br_sb_id'] = array('in',$sb_ids);
$sl_ids_array = $this->bankrollpop_relations->where($where)->getField('br_sb_id,br_sl_id');//sb_id和sl_id关联数组
$sl_ids = implode(',',$sl_ids_array);//所有sl_id
$where['sl_id'] = array('in',$sl_ids);
$sl_list = $this->settlementpop_list->where($where)->getField('sl_id,sl_schedule_name,sl_status');
$bankroll = $this->sgoods_bankroll->order('sb_id desc')->limit(50)->select();
foreach ($bankroll as $k=>&$v) {
$sl_id = $sl_ids_array[$v['sb_id']];
if($sl_id){
$v['sl_schedule_name'] = $sl_list[$sl_id]['sl_schedule_name'];
$v['sl_status'] = $sl_list[$sl_id]['sl_status'];
}
}
优化之后提高百倍!正好记录一篇博客:http://www.tantengvip.com/2015/07/relation-mysql/
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号