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 相关文章推荐
用函数读出数据表内容放入二维数组
Oct 09 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
Nov 01 PHP
php如何调用webservice应用介绍
Nov 24 PHP
php字符串分割函数explode的实例代码
Feb 07 PHP
解析php中heredoc的使用方法
Jun 17 PHP
PHP实现的封装验证码类详解
Jun 18 PHP
使用PHP求两个文件的相对路径
Jun 20 PHP
php继承中方法重载(覆盖)的应用场合
Feb 09 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
Feb 10 PHP
实现PHP+Mysql无限分类的方法汇总
Mar 02 PHP
php实现的错误处理封装类实例
Jun 20 PHP
ajax+php实现无刷新验证手机号的实例
Dec 22 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初学者们头痛的十四个问题
2007/01/15 PHP
phpmyadmin 访问被拒绝的真实原因
2009/06/15 PHP
php 应用程序安全防范技术研究
2009/09/25 PHP
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
jquery.gridrotator实现响应式图片展示画廊效果
2015/06/23 Javascript
Javascript编程中几种继承方式比较分析
2015/11/28 Javascript
JavaScript截取、切割字符串的技巧
2016/01/07 Javascript
JavaScript 函数模式详解及示例
2016/09/07 Javascript
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
JavaScript实现重力下落与弹性效果的方法分析
2017/12/20 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
Vue 修改网站图标的方法
2020/12/31 Vue.js
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
[43:48]Ti4正赛第一天 VG vs NEWBEE 2
2014/07/19 DOTA
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python编程把二叉树打印成多行代码
2018/01/04 Python
Python 对输入的数字进行排序的方法
2018/06/23 Python
python 平衡二叉树实现代码示例
2018/07/07 Python
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
如何手工释放资源
2013/12/15 面试题
一年级班主任寄语
2014/01/19 职场文书
秋游活动策划方案
2014/02/16 职场文书
物流专员岗位职责
2014/02/17 职场文书
我爱我校演讲稿
2014/05/21 职场文书
特教教师先进事迹
2014/05/21 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
故宫英文导游词
2015/01/31 职场文书
写给同学的新学期寄语
2015/02/27 职场文书
水知道答案观后感
2015/06/08 职场文书
幼儿园中班教育随笔
2015/08/14 职场文书
2016年中学端午节主题活动总结
2016/04/01 职场文书
如何判断微信付款码和支付宝付款码
2021/04/01 PHP
redis的list数据类型相关命令介绍及使用
2022/01/18 Redis