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 Try Catch异常测试
Mar 01 PHP
PHP XML数据解析代码
May 26 PHP
php下正则来匹配dede模板标签的代码
Aug 21 PHP
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
May 18 PHP
YII中assets的使用示例
Jul 31 PHP
PHP中new static() 和 new self() 的区别介绍
Jan 09 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
May 13 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
Dec 25 PHP
PHP 接入支付宝即时到账功能
Sep 18 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
May 05 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 PHP
PHP使用Http Post请求发送Json对象数据代码解析
Jul 16 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设计模式 Adapter(适配器模式)
2011/06/26 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
广告切换效果(缓动切换)
2009/05/27 Javascript
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
微信小程序 MD5加密登录密码详解及实例代码
2017/01/12 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
微信小程序显示下拉列表功能【附源码下载】
2017/12/12 Javascript
Vue实现PopupWindow组件详解
2018/04/28 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
jQuery轮播图功能制作方法详解
2019/12/03 jQuery
javascript实现fetch请求返回的统一拦截
2019/12/22 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
Pyramid将models.py文件的内容分布到多个文件的方法
2013/11/27 Python
Python 性能优化技巧总结
2016/11/01 Python
彻底搞懂Python字符编码
2018/01/23 Python
python3 pandas 读取MySQL数据和插入的实例
2018/04/20 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
2019/07/19 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
德国鞋子网上商店:Omoda.de
2017/03/31 全球购物
MAC Cosmetics巴西官方网站:M·A·C彩妆
2019/04/18 全球购物
药物学专业学生的自我评价
2013/10/27 职场文书
校园报刊亭创业计划书
2014/01/02 职场文书
旅游业大学生创业计划书
2014/01/31 职场文书
会计助理岗位职责
2014/02/17 职场文书
银行进社区活动总结
2014/07/07 职场文书
整改报告格式
2014/11/06 职场文书
党员自评材料范文
2014/12/17 职场文书
超市采购员岗位职责
2015/04/07 职场文书
情感电台广播稿
2015/08/18 职场文书