18910140161

tp5 单表大数据,model类查询内存溢出解决方案

2023-03-07 21:14:46

172

今天开发时遇到一个问题,thinkphp5 在做大数据查询的时候,比如我这个一个表现在20w+ 数据,要说多也不是很多,结果我在用model类查询的时候加了一个条件,很简单的查询,结果给我内存益处了,莫名奇妙,百度了一圈,大概有一下几个观点:

1:Db灵活,随用随写,model需要建一个和表名对应的模型类,有一些中间表或者辅助表可以直接用db,没必要model,有一些实体类的可以用model

2:说db是直接操作数据库,所以db比model要快一些

但是今天我的情况明明很简单的一个where条件查询,结果直接php内存溢出,后来我换成db,直接秒开,这我就不懂了,这才20w的数据,希望知道的大神给我科普科普,现在thinkphp 的 qq群,都是广告群,哎现在的大环境真是难。

然后我又仔细的分析了一下我的这个整个逻辑,我是在查询一个订单的来源,这个来源字段是存在了订单表,但是我想在商品表做一个列表筛选查询,商品表大概20w+的数据,我是先去订单表查询来源为1的订单id,然后将符合的订单的id存到一个数组,生成一个where条件例如: $map['oid'] = ['eq', $arr], 然后拿这个map 去商品表,但是这时候会发现 我们查到的这个$arr 数组 里面会有很多订单id, 这样再去商品表的时候效率肯定也会很低,这时候我就换了一个思路,将这个需求放到订单列表里,直接在订单表里查询来源,然后查出来的订单每个订单数据后面加入一个详情的按钮,点进去就跳转到商品列表(是这个订单下的所有商品的列表),这样提高了效率,也达到的客户的需求。

总结下来就是,如果mysql单表数据量大了查询时候内存溢出了,这时候可以将model类的查询换成db类的查询,如果不行,就只能重新审查这个查询的逻辑是否有替代方案,或者更换查询条件。


我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航