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 EOT定界符的使用详解
Sep 30 PHP
php feof用来识别文件末尾字符的方法
Aug 01 PHP
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
Dec 29 PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
Nov 02 PHP
php Ubb代码编辑器函数代码
Jul 05 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
Jun 28 PHP
通过dbi使用perl连接mysql数据库的方法
Apr 16 PHP
php发送与接收流文件的方法
Feb 11 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
Sep 22 PHP
PHP实现的回溯算法示例
Aug 15 PHP
PHP设计模式之装饰器模式定义与用法详解
Apr 02 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
Oct 02 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概率算法实例
2014/04/09 PHP
PHP strcmp()和strcasecmp()的区别实例
2016/11/05 PHP
php用xpath解析html的代码实例讲解
2019/02/14 PHP
JavaScript 动态改变图片大小
2009/06/11 Javascript
JavaScript中常用的运算符小结
2012/01/18 Javascript
js通过元素class名字获取元素集合的具体实现
2014/01/06 Javascript
Jquery倒计时源码分享
2014/05/16 Javascript
js实现百度登录框鼠标拖拽效果
2017/03/07 Javascript
基于IView中on-change属性的使用详解
2018/03/15 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
javascript实现异形滚动轮播
2019/11/28 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
python获取局域网占带宽最大3个ip的方法
2015/07/09 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
对pandas中Series的map函数详解
2018/07/25 Python
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
Shoes For Crews法国官网:美国领先的防滑鞋设计和制造商
2018/01/01 全球购物
建筑人员岗位职责
2013/12/25 职场文书
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
计算机专业应届生求职信
2014/04/06 职场文书
《画》教学反思
2014/04/14 职场文书
植树节标语
2014/06/27 职场文书
人与自然的观后感
2015/06/18 职场文书
2016春季运动会开幕词
2016/03/04 职场文书
机关单位2016年创先争优活动总结
2016/04/05 职场文书
PYTHON InceptionV3模型的复现详解
2022/05/06 Python
Qt数据库应用之实现图片转pdf
2022/06/01 Java/Android
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers