Laravel中Eloquent count高效用法?如何提升性能?
Laravel 数据库端计数优化
要让计数在数据库端执行以提升性能,核心是避免把全量数据加载到PHP内存后再统计,直接让数据库完成计数工作,两种写法的区别和正确选择如下:
User::all()->count()是低效的错误用法
这个写法会先执行SELECT * FROM users,把所有用户数据全部读取到PHP内存中,再通过Collection的count()方法在代码层面统计数量。数据量小的时候可能没明显问题,但用户量一旦上升,不仅会占用大量内存,还会拖慢整个请求,完全违背性能优化的初衷。User::count()才是正确的数据库端计数方式
调用模型的静态count()方法时,Laravel会生成SELECT COUNT(*) FROM users的SQL语句,让数据库直接计算总数并返回一个数字。这种方式只需要数据库返回一个整数结果,内存占用极低,执行速度远快于前者。
如果是处理关联模型的计数(比如统计某篇文章的评论数),同样要注意区分:
- 错误写法:
$post->comments->count()(加载所有评论到内存后计数) - 正确写法:
$post->comments()->count()(生成SELECT COUNT(*) FROM comments WHERE post_id = ?在数据库端统计)
内容的提问来源于stack exchange,提问作者Maicon Parra da Silva
相关产品推荐
相关产品推荐

