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 面向对象的一个例子
Apr 12 PHP
php中使用cookie来保存用户登录信息的实现代码
Mar 08 PHP
关于JSON以及JSON在PHP中的应用技巧
Nov 27 PHP
教你如何开启shopnc b2b2c 伪静态
Oct 21 PHP
php根据指定位置和长度获得子字符串的方法
Mar 17 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 PHP
php计算整个mysql数据库大小的方法
Jun 19 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
Nov 23 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
Sep 13 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
Mar 22 PHP
php apache开启跨域模式过程详解
Jul 08 PHP
PHP7 list() 函数修改
Mar 09 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
使用sockets:从新闻组中获取文章(二)
2006/10/09 PHP
Apache2 httpd.conf 中文版
2006/12/06 PHP
PHP开发规范手册之PHP代码规范详解
2011/01/13 PHP
PHP实现在线阅读PDF文件的方法
2015/06/17 PHP
formValidator3.3的ajaxValidator一些异常分析
2011/07/12 Javascript
jquery模拟按下回车实现代码
2011/09/20 Javascript
判断javascript的数据类型(示例代码)
2013/12/11 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
2014/08/20 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
2016/01/28 Javascript
分享自己用JS做的扫雷小游戏
2016/02/17 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
2017/06/21 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
vue图片上传组件使用详解
2019/12/23 Javascript
python的常见命令注入威胁
2013/02/18 Python
Python里disconnect UDP套接字的方法
2015/04/23 Python
Python中表示字符串的三种方法
2017/09/06 Python
python使用celery实现异步任务执行的例子
2019/08/28 Python
python实现的批量分析xml标签中各个类别个数功能示例
2019/12/30 Python
如何通过python实现人脸识别验证
2020/01/17 Python
Python 2种方法求某个范围内的所有素数(质数)
2020/01/31 Python
Python多线程的退出控制实现
2020/08/10 Python
django有哪些好处和优点
2020/09/01 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
利用HTML5 Canvas API绘制矩形的超级攻略
2016/03/21 HTML / CSS
英国最好的温室之家:Greenhouses Direct
2019/07/13 全球购物
计算机学生求职信范文
2014/01/30 职场文书
超市国庆节促销方案
2014/02/20 职场文书
原料仓仓管员岗位职责
2014/07/08 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
个人原因辞职信模板
2015/05/13 职场文书
2015年学生管理工作总结
2015/05/26 职场文书
Java面试题冲刺第十九天--数据库(4)
2021/08/07 Java/Android
SQLServer权限之只开启创建表权限
2022/04/12 SQL Server