【问题标题】:laravel eager Load performancelaravel 渴望加载性能
【发布时间】:2021-03-15 09:08:52
【问题描述】:

我有一个关于急切加载的问题,先添加约束或在性能更好之后添加约束。例如,

User::with('userinfo')->find($id)   

和

User::where('id',$id)->with('userinfo')->get()  

它的性能相差多少?

【问题讨论】:

  • ->get() 会加载所有结果,而->find 只显示 1 个结果,如果结果是 1000 行,那么 ->find 会快 1000 倍且更轻
  • 但我有 where 查询生成器用于约束 user_id =1

标签: laravel eager-loading


【解决方案1】:

在您的实例中,您只在两个示例中运行了 2 个查询。 find($id) 与 where('id', $id) 完全相同,因为主键是唯一的。 with() 的顺序无关紧要,因为 Laravel 仍然会执行相同的查询。

如果急切加载很重要,假设您有一个控制器可以检索数据库中的所有 20 个用户

User::get()

以及输出其信息的刀片视图

@foreach($users as $user)
   {{ $user->userInfo->(some property) }}
@endforeach

您的刀片视图必须对每个用户信息进行查询,这给您一个经典的 N+1 问题(1 个查询获取所有用户,20 个查询获取每个用户信息)。这就是急切加载的用武之地,您只需 2 次查询就可以获取 20 个用户及其信息。

【讨论】:

    猜你喜欢
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 2014-11-29
    相关资源
    最近更新 更多