laravel 数据库查询数据量较大如何优化?

项目中某个部分需要按照前端页面选择的条件进行数据库查询,如下图:
https://img.mukewang.com/5c8f578a00017a7908000118.jpg

我的查询方法是:
第一步:先根据地点、时间等条件拿到所有符合的结果,(不加入人员属性的条件)
第二步:然后再遍历这个集合,从中挑选出所有符合我人员属性的结果,此处人员属性是可以多选的,而且要查出的是包含我所选择属性的所有结果。

按照这个方法进行查询获得数据总量大约在4万条左右,这时候php会报错:
Allowed memory size of 134217728 bytes exhausted (tried to allocate 4194304 bytes)
根据报错信息,大概是我查询的数据据两在内存中所占用的空间太大,超出了php默认的128M内存。
也就是说,当第一步完成后,此时所有数据已经超出内存限制了。。。

有以下几个问题请问各位大佬指点:
1.除了增加php默认内存(比如改为512M的确可以解决这个问题),还有其他方法嘛?因为感觉这个方法治标不治本啊!
2.有没有更好的查询逻辑呢?我的逻辑总结下就先查出所有的结果在进行筛选,有没有可能把人员属性筛选条件也加进去一起查出来再进行分页操作呢?如果可以加进去,怎么做呢?

ps:我看京东或淘宝这种电商网站也存在对某个属性进行多选的筛选情况,不知道他们是怎么实现的呢?

https://img2.mukewang.com/5c8f578b0001afe708000152.jpg

拉莫斯之舞
浏览 1122回答 2
2回答

达令说

第一步:先根据地点、时间等条件拿到所有符合的结果,(不加入人员属性的条件)第二步:然后再遍历这个集合,从中挑选出所有符合我人员属性的结果,此处人员属性是可以多选的,而且要查出的是包含我所选择属性的所有结果。 从你的这个描述逻辑来看,没人会把几万条数据查询出来放在内存中的,这样内存溢出很正常。 目前我们的电商系统,都是构造好所有查询参数,再去数据库分页取数据,同时对查询条件和结果进行缓存处理。
打开App,查看更多内容
随时随地看视频慕课网APP