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上传图片、删除图片实现代码
May 12 PHP
rrmdir php中递归删除目录及目录下的文件
May 15 PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
Jul 23 PHP
PHP判断文件是否存在、是否可读、目录是否存在的代码
Oct 03 PHP
PHP代码审核的详细介绍
Jun 13 PHP
thinkphp 多表 事务详解
Jun 17 PHP
php-perl哈希算法实现(times33哈希算法)
Dec 30 PHP
PHP提交表单失败后如何保留已经填写的信息
Jun 20 PHP
分享PHP守护进程类
Dec 30 PHP
CI框架中数据库操作函数$this->db->where()相关用法总结
May 17 PHP
PHP上传图片类显示缩略图功能
Jun 30 PHP
asp.net和php的区别点总结
Oct 10 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入门之连接mysql数据库的一个类
2012/04/21 PHP
linux下实现定时执行php脚本
2015/02/13 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
javascript获取元素偏移量的方法有哪些
2014/06/24 Javascript
一个js过滤空格的小函数
2014/10/10 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
EasyUI学习之Combobox级联下拉列表(2)
2016/12/29 Javascript
你真的了解BOM中的history对象吗
2017/02/13 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
使用Bootrap和Vue实现仿百度搜索功能
2017/10/26 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
jQuery 操作 HTML 元素和属性的方法
2018/11/12 jQuery
vue中引入mxGraph的步骤详解
2019/05/17 Javascript
javascript获取select值的方法完整实例
2019/06/20 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
python使用循环打印所有三位数水仙花数的实例
2018/11/13 Python
Pandas 解决dataframe的一列进行向下顺移问题
2019/12/27 Python
Python内置类型性能分析过程实例
2020/01/29 Python
python使用opencv resize图像不进行插值的操作
2020/07/05 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
python 基于Apscheduler实现定时任务
2020/12/15 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
美津浓巴西官方网站:Mizuno巴西
2019/07/24 全球购物
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
Happy Plugs官网:瑞典无线耳机品牌
2020/07/16 全球购物
业务助理岗位职责
2013/11/18 职场文书
大众服装店创业计划书范文
2014/01/01 职场文书
市场专员岗位职责
2014/02/14 职场文书
财产公证书格式
2014/04/10 职场文书
因身体原因离职的辞职信范文
2015/05/12 职场文书
nginx rewrite功能使用场景分析
2022/05/30 Servers
5个实用的JavaScript新特性
2022/06/16 Javascript