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 得到根目录的 __FILE__ 常量
Jul 23 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
Apr 08 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
Jun 14 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
Jul 03 PHP
ThinkPHP查询返回简单字段数组的方法
Aug 25 PHP
PHP产生不重复随机数的5个方法总结
Nov 12 PHP
Joomla简单判断用户是否登录的方法
May 04 PHP
PHP数据对象PDO操作技巧小结
Sep 27 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
Nov 25 PHP
php实现文章评论系统
Feb 18 PHP
让你的PHP,APACHE,NGINX支持大文件上传
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
中东人咖啡哲学
2021/03/03 咖啡文化
简单的php写入数据库类代码分享
2011/07/26 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
PHP数组基本用法与知识点总结
2020/06/02 PHP
JavaScript XML实现两级级联下拉列表
2008/11/10 Javascript
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
three.js实现圆柱体
2018/12/30 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
使用Python开发windows GUI程序入门实例
2014/10/23 Python
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
python 实现网上商城,转账,存取款等功能的信用卡系统
2016/07/15 Python
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
Python中的CSV文件使用"with"语句的方式详解
2018/10/16 Python
Python爬虫学习之翻译小程序
2019/07/30 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
使用python实现对元素的长截图功能
2019/11/14 Python
python 异步async库的使用说明
2020/05/04 Python
html5指南-2.如何操作document metadata
2013/01/07 HTML / CSS
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
Delphi软件工程师试题
2013/01/29 面试题
中专药剂专业应届毕的自我评价
2013/12/27 职场文书
新书吧创业计划书
2014/01/31 职场文书
小学中秋节活动方案
2014/02/06 职场文书
四查四看剖析材料
2014/02/14 职场文书
生产部厂长助理职位说明书
2014/03/03 职场文书
小学一年级评语大全
2014/04/22 职场文书
计算机软件专业求职信
2014/06/10 职场文书
群众路线教师自我剖析材料
2014/09/29 职场文书
《海上日出》教学反思
2016/02/23 职场文书
oracle通过存储过程上传list保存功能
2021/05/12 Oracle
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
2022/01/22 MySQL