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 构造函数construct的前下划线是双的_
Dec 08 PHP
在PHP中使用反射技术的架构插件使用说明
May 18 PHP
PHP加密扩展库Mcrypt安装和实例
Nov 10 PHP
php递归创建目录的方法
Feb 02 PHP
Opcache导致php-fpm崩溃nginx返回502
Mar 02 PHP
Symfony2 session用法实例分析
Feb 04 PHP
PHPCMS忘记后台密码的解决办法
Oct 30 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
Nov 16 PHP
Yii框架表单提交验证功能分析
Jan 07 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
Aug 11 PHP
PHP快速排序算法实现的原理及代码详解
Apr 03 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 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
手把手教你使用DedeCms V3的在线采集图文教程
2007/04/03 PHP
PHP的explode和implode的使用说明
2011/07/17 PHP
使用php 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
PHP获取客户端及服务器端IP的封装类
2016/07/21 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
php图形jpgraph操作实例分析
2017/02/22 PHP
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
将json当数据库一样操作的javascript lib
2013/10/28 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
2015/11/17 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
浅谈python中列表、字符串、字典的常用操作
2017/09/19 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
Python中应该使用%还是format来格式化字符串
2018/09/25 Python
Django错误:TypeError at / 'bool' object is not callable解决
2019/08/16 Python
利用python计算时间差(返回天数)
2019/09/07 Python
pygame实现俄罗斯方块游戏(基础篇3)
2019/10/29 Python
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
CSS3 对过渡(transition)进行调速以及延时
2020/10/21 HTML / CSS
adidas澳大利亚官方网站:adidas Australia
2018/04/15 全球购物
ALDO美国官网:加拿大女鞋品牌
2018/12/28 全球购物
求职自荐信范文格式
2013/11/29 职场文书
八一建军节活动方案
2014/02/10 职场文书
同学会主持词
2014/03/18 职场文书
企业务虚会发言材料
2014/10/20 职场文书
报案材料怎么写
2015/05/25 职场文书
Python文件的操作示例的详细讲解
2021/04/08 Python
js 数组 fill() 填充方法
2021/11/02 Javascript