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 阴历-农历-转换类代码
Jan 16 PHP
php笔记之:php数组相关函数的使用
Apr 26 PHP
php使用wordwrap格式化文本段落的方法
Mar 17 PHP
php邮件发送的两种方式
Apr 28 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
Jan 03 PHP
Centos6.5和Centos7 php环境搭建方法
May 27 PHP
php实现用户注册密码的crypt加密
Jun 08 PHP
PHP实现将base64编码字符串转换成图片示例
Jun 22 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
Jan 23 PHP
PHP常用正则表达式精选(推荐)
May 28 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
Oct 21 PHP
关于PHP求解三数之和问题详析
Nov 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
php上传图片客户端和服务器端实现方法
2015/03/30 PHP
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
[原创]站长必须要知道的javascript广告代码
2007/05/30 Javascript
JavaScript获取网页支持表单字符集的方法
2015/04/02 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
js获取客户端操作系统类型的方法【测试可用】
2016/05/27 Javascript
深入浅析knockout源码分析之订阅
2016/07/12 Javascript
AngularJS监听路由变化的方法
2017/03/07 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
基于JavaScript实现报警器提示音效果
2017/10/27 Javascript
微信小程序button组件使用详解
2018/01/31 Javascript
详解React中setState回调函数
2018/06/14 Javascript
原生JS实现获取及修改CSS样式的方法
2018/09/04 Javascript
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
基于JS实现数字动态变化显示效果附源码
2019/07/18 Javascript
vue通过数据过滤实现表格合并
2020/11/30 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
2020/07/17 Javascript
VUE项目实现主题切换的多种方法
2020/11/26 Vue.js
把MySQL表结构映射为Python中的对象的教程
2015/04/07 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
python可视化实现代码
2019/01/15 Python
django 多数据库及分库实现方式
2020/04/01 Python
python根据字典的键来删除元素的方法
2020/08/16 Python
Python实现快速大文件比较代码解析
2020/09/04 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
物业管理大学生个人的自我评价
2013/10/10 职场文书
会计人员岗位职责
2015/02/03 职场文书
2015建军节87周年演讲稿
2015/03/19 职场文书
QT连接MYSQL数据库的详细步骤
2021/07/07 MySQL
Python实现制作销售数据可视化看板详解
2021/11/27 Python