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数组 为文章加关键字连接 文章内容自动加链接
Dec 29 PHP
php set_time_limit()函数的使用详解
Jun 05 PHP
php实现遍历目录并删除指定文件中指定内容
Jan 21 PHP
php约瑟夫问题解决关于处死犯人的算法
Mar 23 PHP
PHP 二维数组和三维数组的过滤
Mar 16 PHP
php实现等比例不失真缩放上传图片的方法
Nov 14 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
Aug 28 PHP
Laravel框架路由设置与使用示例
Jun 12 PHP
PHP getNamespaces()函数讲解
Feb 03 PHP
WordPress伪静态规则设置代码实例
Dec 10 PHP
PHP哈希表实现算法原理解析
Dec 11 PHP
微信小程序和php的登录实现
Apr 01 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
推荐文章系统(一)
2006/10/09 PHP
一个MYSQL操作类
2006/11/16 PHP
几个有用的php字符串过滤,转换函数代码
2012/05/01 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
2013/06/20 PHP
你必须知道的Javascript知识点之"深入理解作用域链"的介绍
2013/04/23 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
2015/01/02 Javascript
JavaScript中获取Radio被选中的值
2015/11/11 Javascript
MUI  Scroll插件的使用详解
2017/04/13 Javascript
深入掌握 react的 setState的工作机制
2017/09/27 Javascript
vue中倒计时组件的实例代码
2018/07/06 Javascript
微信小程序实现发红包功能
2018/07/11 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
NProgress显示顶部进度条效果及使用详解
2019/09/21 Javascript
使用vue-router切换页面时实现设置过渡动画
2019/10/31 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
2020/04/17 Javascript
在vant中使用时间选择器和popup弹出层的操作
2020/11/04 Javascript
[45:46]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS DT
2014/05/23 DOTA
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
python中os操作文件及文件路径实例汇总
2015/01/15 Python
python利用sklearn包编写决策树源代码
2017/12/21 Python
Python使用爬虫爬取静态网页图片的方法详解
2018/06/05 Python
Python 中的lambda函数介绍
2018/10/10 Python
用pycharm开发django项目示例代码
2018/10/24 Python
对python中矩阵相加函数sum()的使用详解
2019/01/28 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
美国女士泳装店:Swimsuits For All
2017/03/02 全球购物
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
电气工程及其自动化学生实习自我鉴定
2013/09/19 职场文书
扬尘污染防治方案
2014/06/15 职场文书
党的群众路线教育实践活动个人对照检查材料范文
2014/09/25 职场文书
2014年纪委工作总结
2014/12/05 职场文书
人为什么会“幸灾乐祸”?
2019/08/06 职场文书
两行代码解决Jupyter Notebook中文不能显示的问题
2021/04/24 Python
MySQL触发器的使用
2021/05/24 MySQL