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一些有意思的小区别
Dec 06 PHP
PHP 多维数组排序实现代码
Aug 05 PHP
yii框架源码分析之创建controller代码
Jun 28 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
Jul 13 PHP
使用PHP接收POST数据,解析json数据
Jun 28 PHP
浅析十款PHP开发框架的对比
Jul 05 PHP
PHP实现读取一个1G的文件大小
Aug 24 PHP
phpstudy默认不支持64位php的解决方法
Feb 20 PHP
PHP实现负载均衡的加权轮询方法分析
Aug 22 PHP
PHP实现的AES双向加密解密功能示例【128位】
Sep 03 PHP
浅谈php的TS和NTS的区别
Mar 13 PHP
php实现对文件压缩简单的方法
Sep 29 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中长文章分页显示实现代码
2012/09/29 PHP
关于PHP模板Smarty的初级使用方法以及心得分享
2013/06/21 PHP
div li的多行多列 无刷新分页示例代码
2013/10/16 PHP
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
php中Snoopy类用法实例
2015/06/19 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
TopList标签和JavaScript结合两例
2007/08/12 Javascript
js渐变显示渐变消失示例代码
2013/08/01 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
2013/08/28 Javascript
jQuery中:not选择器用法实例
2014/12/30 Javascript
javascript二维数组转置实例
2015/01/22 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
关于JavaScript作用域你想知道的一切
2016/02/04 Javascript
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
用JavaScript实现让浏览器停止载入页面的方法
2017/01/19 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
2017/12/11 Javascript
判断“命令按钮”是否被鼠标单击详解
2019/07/31 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
Python 爬虫图片简单实现
2017/06/01 Python
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
Python处理CSV与List的转换方法
2018/04/19 Python
python解决字符串倒序输出的问题
2018/06/25 Python
python远程调用rpc模块xmlrpclib的方法
2019/01/11 Python
pycharm重命名文件的方法步骤
2019/07/29 Python
python进度条显示之tqmd模块
2020/08/22 Python
重构Python代码的六个实例
2020/11/25 Python
韩国11街:11STREET
2018/03/27 全球购物
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
美国床垫连锁店:Mattress Firm
2021/02/13 全球购物
建筑自我鉴定
2013/10/19 职场文书
机械设计专业应届生求职信
2013/11/21 职场文书
2015年乡镇环保工作总结
2015/04/22 职场文书
比较node.js和Deno
2021/04/27 Javascript
Python必备技巧之函数的使用详解
2022/04/04 Python