什么时候用游标cursor而不是直接get?
了解到了cursor可以帮助我们在查询大量数据的时候减少内存占用
也了解到了cursor有副作用会消耗mysql内存
那么什么数量级的情况下更适合用那种方法呢?
cursor
一般是用来处理大量数据,为避免一下取出所有数据导致内存溢出。我在定时任务中会用到,比如你估计有几千条数据要处理,就可以用。get
一般是库里取几条返回,数据大的时候也会有分页,我理解的二者使用场景不一样。cursor
确实会存在内存耗尽的问题,你可以使用lazy
(lazyById
) 或者chunk
(chunkById
)方法用分页就好了吧
所有情况都不要使用cursor,请使用chunkById
可以参考我这篇文章 分享:关于一个 Laravel 使用 cursor 占用内存问题
cursor 占用内存大,速度快。chunkById 速度慢占用内存少,具体场景做对应的取舍
数据量大还是不要用orm了。直接db处理好
游标适合不慌不忙的那种吧,比如每个条目处理几分钟或休息一段时间,不频繁读取的时候。