You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel查询效率差异:以下两组查询方式哪类执行效率更高?

Laravel 两组查询操作执行效率对比

先说结论:两组写法都是后者的执行效率更高,差距会随数据表数据量增大而被拉得更大。


1. Eloquent 查询写法对比:Car::all() 与 Car::find()

  • Car::all() 底层生成的SQL是 SELECT * FROM car,会直接拉取数据表的所有记录,返回包含全部行数据的 Eloquent 集合。查询开销和表数据量正相关,表越大、字段越多,IO 消耗和内存占用就越高。
  • 注意Car::find()属于需要传入主键参数的用法,比如常规写法为 Car::find($id),底层生成的SQL是 SELECT * FROM car WHERE id = ? LIMIT 1,走主键索引仅查询匹配的单条记录,返回单个 Eloquent 模型实例,查询耗时基本稳定在毫秒级,不受全表数据量影响。
  • 效率差异:只要表内数据量大于1,正常传参使用的 Car::find() 效率远高于 Car::all(),二者的查询成本不在一个量级。

2. 查询构造器查询写法对比:DB::table('car')->get() 与 DB::table('car')->first()

  • DB::table('car')->get() 和 Eloquent 的 all() 逻辑完全一致,生成SQL也是 SELECT * FROM car,返回包含全表所有记录的集合,需要拉取全表数据,开销随表体积线性增长。
  • DB::table('car')->first() 底层生成的SQL是 SELECT * FROM car LIMIT 1,仅返回查询结果的第一条数据,不需要遍历全表,哪怕表内有百万级数据,也只返回一条,IO 和内存开销极小。
  • 效率差异:first() 效率远高于同场景下的 get(),数据量越大优势越明显。

补充说明:如果Car::find()不传任何参数属于错误用法,会返回空或者抛出异常,不具备效率对比的意义,业务场景下都是传入主键参数使用。
如果是相同单条查询的场景,查询构造器的性能会略高于 Eloquent,因为 Eloquent 多了一步将查询结果封装为模型实例的开销,但这个开销和全表查询的开销相比可以忽略不计。

内容的提问来源于stack exchange,提问作者wawingi Sebastiao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:45:04