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实现mysql同步的实现方法
Oct 21 PHP
PHP中把stdClass Object转array的几个方法
May 08 PHP
smarty模板引擎中自定义函数的方法
Jan 22 PHP
php构造函数的继承方法
Feb 09 PHP
PHP使用in_array函数检查数组中是否存在某个值
Mar 25 PHP
PHP中SESSION的注销与清除
Apr 16 PHP
thinkPHP导出csv文件及用表格输出excel的方法
Dec 30 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
Mar 07 PHP
php数值转换时间及时间转换数值用法示例
May 18 PHP
php实现获取近几日、月时间示例
Jul 06 PHP
Laravel框架Blade模板简介及模板继承用法分析
Dec 03 PHP
PHP程序守护进程化实现方法详解
Jul 16 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 adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
php 异常处理实现代码
2009/03/10 PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
2010/03/13 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
制作特殊字的脚本
2006/06/26 Javascript
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
2010/08/12 Javascript
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
JQuery伸缩导航练习示例
2013/11/13 Javascript
JavaScript输入邮箱自动提示实例代码
2014/01/13 Javascript
javascript实现验证身份证号的有效性并提示
2015/04/30 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
深入浅出 jQuery中的事件机制
2016/08/23 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
基于JavaScript实现表格滚动分页
2017/11/22 Javascript
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
vue实现匀速轮播效果
2020/06/29 Javascript
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
python中合并两个文本文件并按照姓名首字母排序的例子
2014/04/25 Python
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
Django框架封装外部函数示例
2019/05/28 Python
Django CSRF跨站请求伪造防护过程解析
2019/07/31 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
jupyter notebook清除输出方式
2020/04/10 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
HTML5新增属性data-*和js/jquery之间的交互及注意事项
2017/08/08 HTML / CSS
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
教师自我评价范例
2013/09/24 职场文书
恶搞卫生巾广告词
2014/03/18 职场文书
营销团队口号
2014/06/06 职场文书
工地食品安全责任书
2015/05/09 职场文书
合同审查法律意见书
2015/06/04 职场文书
2015年物业公司保洁工作总结
2015/10/22 职场文书
Css预编语言及区别详解
2021/04/25 HTML / CSS
基于Python实现一个春节倒计时脚本
2022/01/22 Python
如何使用SQL Server语句创建表
2022/04/12 SQL Server