php优化查询foreach代码实例讲解

admin3年前PHP教程48


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;

经过简单的优化:时间(ms):290 -> 230 -> 180

到此这篇关于php优化查询foreach代码实例讲解的文章就介绍到这了,更多相关php优化查询foreach内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

详解PHP服务器如何在有限的资源里最大提升并发能力

概述假设报考app是用5W rmb 向供应商采购,报名当天涌入海量考生,并发数飙升至30W+,导致系统宕机,拒绝服务,致使考生无法报名,那么5W rmb 能否支持30W+并发呢?不过对于我们来说,不妨...

PHP中最低级别的错误类型总结

序言:php错误就是会使脚本运行不正常的情况。php的错误有很多种,包括warning、notice、deprecated、fetal error等。其中notice不叫通知,而叫通知级别的错误,wa...

泉州高防服务器防御方式是怎么样的

泉州高防服务器的防御方式主要有以下几种:流量清洗:流量清洗是高防服务器最基本的防御方式,它通过对所有进入服务器的流量进行实时监测和分析,检测出异常流量并将其过滤掉,从而保证服务器正常运行。这种方式可以...

php框架知识点的整理和补充

我们对于比较常见的php框架,已经基本上有所认识,不过一些比较冷门的框架也可以做一个了解,以便日后的特殊使用。本篇整理了4种php框架,在不同的使用方法上都独具特色,其中很多的框架不被大家熟知,下面我...

浅谈如何提高PHP代码质量之单元测试

目录1、单元测试2、应该使用哪个框架?3、如何设置测试?构建测试对象在模拟中匹配运行时参数匹配运行时异常4、在哪里可以找到更多的例子?1、单元测试通过实现单一责任原则(我们的代码应该只关注功能的单个部...

如何使用Zephir轻松构建PHP扩展

简介比如,在 PHP 中需要与 SQLite3 交互,我们可以自己写方法与之进行连接,再写 SQL 语句请求数据。然而,这都是些既琐碎又重复度相当高的工作,因此,所有开发者对插件的需求呼之欲出。现在,...