数据量太大,使用TP6中chunk分块批量处理数据,而且需要使用多字段分组后批量处理。

问题分析:

使用 mysql 原生查询后,发现分组后的数据量有132298 rows。

使用chunk进行批量处理,发现一共处理了130398 rows。一共少处理了1900 行数据。

查看 chunk 源码,并打印关键逻辑

 

可以看出,chunk中的第二次开始查询下一批数据时,是根据 $lastId 来进行了排序后查找,chunk 这个方法,传入的分组条件,也就是 $column ,最好是一个确定唯一的条件。默认会使用主键。像这样如果多字段group by后,存在多个部分字段重复的情况,也就不建议使用 chunk 方法了。

解决办法: