1、批处理

    有的时候我们会遇到需要定时操作数据的需求,比如定时更新所有用户的权益,徽章等等。这个时候你不能一次性取出所有数据来进行操作,因为数据量太大。

    如果我们一次性取出全部,先不说mysql数据库会很慢,就算取出来传给你,网络开销也很大。这时候你通过网络接收到数据以后,会把这些数据放到一个变量里面。这个变量是存在内存中的,如果过大还会导致内存溢出,内存不足的问题。

    所以我们就需要分页取出数据来进行操作,比如每次取出100条,操作完了再取出下100条。而tp框架提供了一个方便的chunk方法来供我们使用,免去了我们需要手动limit分页的麻烦。

    image.png

    其实单表这么写也没有什么问题,不过一旦你使用了连表查询,就出现问题了。。而他的文档并没有说连表的问题。虽然他的文档有这么一段也说明了主键和排序的问题。
    image.png

    但是,没想到连表的时候是必须,注意,必须!!!传主键,不然他不知道是哪个表的主键。而laravel就没有这个问题。。我当时写的时候去找了他的源码,才看到这个问题,因为我正常写完后一直报错。。

    实例
    image.png

    输出结果:

    image.png
    2、游标查询

    如果你需要处理大量的数据,可以使用新版提供的游标查询功能,该查询方式利用了PHP的生成器特性,可以大 幅减少大量数据查询的内存开销问题。
    image.png

    参考资料:

    1、thinkphp-tp6连表使用chunk分块操作数据的坑
    https://blog.csdn.net/Thepatterraining/article/details/108196368