求助,多层嵌套foreach执行时间太长了,如何使用sql进行查询优化

1. 期望

需要获取每个分区每分钟的温湿度数据,可能由于网络问题,某分钟时1分区有数据,2没有

求助,多层嵌套foreach执行时间太长了,如何使用sql进行查询优化
用了一个比较笨的方法,查询所有分区的温湿度时,时间间隔是最多的,以所有分区的时间为准,然后进行循环,没有数据的就是null

求助,多层嵌套foreach执行时间太长了,如何使用sql进行查询优化

求助,多层嵌套foreach执行时间太长了,如何使用sql进行查询优化

2. 您实际得到的结果?

这样的耗时是处理14401440+14401440+14401440+14401440 数据量的时间?
客户的服务器是4核8G的这个耗时太久了,直接15秒,公司服务器处理完是4秒多
求助,多层嵌套foreach执行时间太长了,如何使用sql进行查询优化

求助,多层嵌套foreach执行时间太长了,如何使用sql进行查询优化
这是前端显示的图表
求助,多层嵌套foreach执行时间太长了,如何使用sql进行查询优化
已经解决
感谢大佬@renxiaotu的解答
下图为处理过程
求助,多层嵌套foreach执行时间太长了,如何使用sql进行查询优化
这里是合并数组打印的 $array 的结果,$selectRa需要每个单独写,即$heartsN对应tN和hN

$selectRaw1 = '
    DATE_FORMAT(created_at,"%Y-%m-%d %H:%i") as time,
    ROUND(AVG(temperature*1.0),1) as t1,
    ROUND(AVG(humidity*1.0),1) as h1
';

求助,多层嵌套foreach执行时间太长了,如何使用sql进行查询优化

经过优化处理的的时间为1秒多
求助,多层嵌套foreach执行时间太长了,如何使用sql进行查询优化

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

把所有的$hearts$hearts->toArray()再遍历,会快许多,把$heartsN全部$heartsN=array_column($heartsN,null,'time'),这样就不需要循环嵌套了,又快许多

3年前 评论
lvjie1996 (楼主) 3年前
讨论数量: 7

一般像这种分时间段,时间间隔的建议用类似于mongoDB做数据统计。直接查很吃力!

3年前 评论

这种统计表用后台任务提前算好存在 report 表中,直接计算计算压力太大

3年前 评论

这种数据建议用时序数据库存储,或者用 Clickhouse 存储,兼容一些 SQL 查询语句。其次就是数据表的设计。

3年前 评论

:joy: 以空间换时间,冗余字段吧,反范式设计

3年前 评论

我觉得这么复杂的查询,还是用原生SQL语句的好。

3年前 评论

把所有的$hearts$hearts->toArray()再遍历,会快许多,把$heartsN全部$heartsN=array_column($heartsN,null,'time'),这样就不需要循环嵌套了,又快许多

3年前 评论
lvjie1996 (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!