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代码优化及php相关问题总结
Oct 09 PHP
使用 php4 加速 web 传输
Oct 09 PHP
php explode函数实例代码
Feb 27 PHP
php比较两个绝对时间的大小
Jan 31 PHP
php带抄送和密件抄送的邮件发送方法
Mar 20 PHP
网页的分页下标生成代码(PHP后端方法)
Feb 03 PHP
PHP实现linux命令tail -f
Feb 22 PHP
PHP序列化/对象注入漏洞分析
Apr 18 PHP
PHP Header失效的原因分析及解决方法
Nov 16 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
Nov 16 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
Sep 26 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
给多个地址发邮件的类
2006/10/09 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
教你如何用php实现LOL数据远程获取
2014/06/10 PHP
PHP实现的XML操作类【XML Library】
2016/12/29 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
js 模拟气泡屏保效果代码
2010/07/10 Javascript
数组方法解决JS字符串连接性能问题有争议
2011/01/12 Javascript
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
jQuery简单实现banner图片切换
2014/01/02 Javascript
判断及设置浏览器全屏模式
2014/04/20 Javascript
jquery访问ashx文件示例代码
2014/08/11 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
JavaScript Date对象详解
2016/03/01 Javascript
jQuery操作属性和样式详解
2016/04/13 Javascript
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
2017/07/13 Javascript
javaScript 连接打印机,打印小票的实例
2017/12/29 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
Angular7创建项目、组件、服务以及服务的使用
2019/02/19 Javascript
JS JQuery获取data-*属性值方法解析
2020/09/01 jQuery
python中dir函数用法分析
2015/04/17 Python
Python的Flask框架中实现分页功能的教程
2015/04/20 Python
python根据日期返回星期几的方法
2015/07/06 Python
Python探索之修改Python搜索路径
2017/10/25 Python
解决Pycharm无法import自己安装的第三方module问题
2018/05/18 Python
在IPython中执行Python程序文件的示例
2018/11/01 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
网络安全类面试题
2015/08/01 面试题
生物化工专业个人自荐信
2013/09/26 职场文书
《诺贝尔》教学反思
2014/02/17 职场文书
汉语言文学专业求职信
2014/06/19 职场文书
二审答辩状范文
2015/05/22 职场文书
五年级作文之成长
2019/09/16 职场文书
浅谈移动端中的视口(viewport)的具体使用
2021/04/13 HTML / CSS