php优化查询foreach代码实例讲解


Posted in PHP onMarch 24, 2021

php代码优化

应避免在php foreach里面进行sql查询

以下代码示例使用了laravel的操作数据库api,eloquent orm

foreach里面执行两次sql查询

// $datas 要返回的数据
foreach ($datas as $_v) {
  // todo 在foreach中查询了两次 **time**: 290 ms(postman)
  $uid = $_v->uid;
  $_v->user_name  = User::find($uid)->username; // 1
  $_v->user_avatar = User::find($uid)->avatar;  // 2
}

foreach里面执行一次sql查询

foreach ($datas as $_v) {
  // todo
  // 简单的优化使得两次sql查询变成一次
  // 在foreach中查询了一次 **time**: 230 ms(postman)
  $user = User::find($_v->uid));   // 1
  $_v->user_name  = $user->username;
  $_v->user_avatar = $user->avatar;
}

将sql查询移到foreach外面

上面两个方法都不可避免的在foreach里面执行了数据库查询

**应避免在foreach中执行sql查询**

此处我的做法是再加一层foreach+if来代替sql查询

// 本质上是将foreach中的查询移到外面
// $tmp_data_arr 是存储在foreach外面执行的数据库查询结果
foreach ($tmp_data_arr as $value) {
  foreach ($datas as $_v) {
    if ($_v->uid === $value['id']) { // **time**: 180 ms(postman)
      $_v->user_name  = $value['username'];
      $_v->user_avatar = $value['avatar'];
    }
  }
}

小结

// 返回数据
return $datas;
PHP 相关文章推荐
用PHP实现Ftp用户的在线管理的代码
Mar 06 PHP
PHP include_path设置技巧分享
Jul 03 PHP
PHP导出MySQL数据到Excel文件(fputcsv)
Jul 03 PHP
PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
Oct 05 PHP
PHP实现生成唯一会员卡号
Aug 24 PHP
微信公众平台开发之配置与请求
Aug 26 PHP
php需登录的文件上传管理系统
Mar 21 PHP
phpcms中的评论样式修改方法
Oct 21 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
Jun 06 PHP
详解thinkphp中的volist标签
Jan 15 PHP
Laravel中9个不经常用的小技巧汇总
Apr 16 PHP
Laravel框架源码解析之反射的使用详解
May 14 PHP
PHP引擎php.ini参数优化深入讲解
Mar 24 #PHP
PHP使用Redis队列执行定时任务实例讲解
Mar 24 #PHP
YII2 全局异常处理深入讲解
Laravel的加密解密与哈希实例讲解
Mar 24 #PHP
laravel使用redis队列实例讲解
phpquery中文手册
Mar 18 #PHP
thinkphp5 路由分发原理
Mar 18 #PHP
You might like
PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方法
2009/03/10 PHP
Php中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
深入Nginx + PHP 缓存详解
2013/07/11 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
PHP substr()函数参数解释及用法讲解
2017/11/23 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
JavaScript开发时的五个注意事项
2007/12/08 Javascript
jQuery示例收集
2010/11/05 Javascript
jquery $.ajax()取xml数据的小问题解决方法
2010/11/20 Javascript
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
Jquery提交表单 Form.js官方插件介绍
2012/03/01 Javascript
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
2015/05/06 Javascript
JavaScript 中有关数组对象的方法(详解)
2016/08/15 Javascript
jQuery层次选择器用法示例
2016/09/09 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
2016/12/29 Javascript
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
JS排序之冒泡排序详解
2017/04/08 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
jQuery实现动态添加和删除input框代码实例
2019/03/29 jQuery
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
[01:56]2014DOTA2西雅图邀请赛 MVP外卡赛老队长精辟点评
2014/07/09 DOTA
Python如何读取MySQL数据库表数据
2017/03/11 Python
小米5s微信跳一跳小程序python源码
2018/01/08 Python
Python实现PS滤镜的万花筒效果示例
2018/01/23 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
Python实现队列的方法示例小结【数组,链表】
2020/02/22 Python
学生实习自我鉴定
2013/10/11 职场文书
季度思想汇报
2014/01/01 职场文书
美食节目策划方案
2014/05/31 职场文书
国际贸易专业自荐信
2014/06/10 职场文书
中学生爱国演讲稿
2014/09/05 职场文书
信息合作协议书
2014/10/09 职场文书
离婚案件答辩状
2015/05/22 职场文书
交通事故代理词范文
2015/05/23 职场文书
小学记事作文之200字
2019/08/06 职场文书