什么时候用游标cursor而不是直接get?

了解到了cursor可以帮助我们在查询大量数据的时候减少内存占用
也了解到了cursor有副作用会消耗mysql内存

那么什么数量级的情况下更适合用那种方法呢?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 6

cursor 一般是用来处理大量数据,为避免一下取出所有数据导致内存溢出。我在定时任务中会用到,比如你估计有几千条数据要处理,就可以用。 get 一般是库里取几条返回,数据大的时候也会有分页,我理解的二者使用场景不一样。

cursor 确实会存在内存耗尽的问题,你可以使用 lazy (lazyById) 或者 chunk (chunkById)方法

尽管游标方法使用的内存比常规查询少得多(一次只在内存中保存一个 Eloquent 模型),但它最终仍会耗尽内存。 这是由于 PHP 的 PDO 驱动程序在其缓冲区中内部缓存了所有原始查询结果。 如果您正在处理大量 Eloquent 记录,请考虑改用 惰性方法

3年前 评论

所有情况都不要使用cursor,请使用chunkById

3年前 评论

可以参考我这篇文章 分享:关于一个 Laravel 使用 cursor 占用内存问题

cursor 占用内存大,速度快。chunkById 速度慢占用内存少,具体场景做对应的取舍

3年前 评论

数据量大还是不要用orm了。直接db处理好

3年前 评论

游标适合不慌不忙的那种吧,比如每个条目处理几分钟或休息一段时间,不频繁读取的时候。

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!