Laravel eloquent 100000 条记录查询速度慢

Laravel eloquent query slow with 100000 records

我有这个简单的 eloquent 查询,工作正常,但记录很少。
当数据库递增到 100000 条记录时变得非常慢。

我读到应该使用 chunk 而不是 get。我如何为这个查询实现它?

$collection = Contact::with('shop');
$collection = $collection->orderBy('created_at', 'DESC');
$collection = $collection->get();
$json = $collection->map(function ($contact) {
    return [ 
        'id' => $contact->id,
        'name' => $contact->name,   
        ...about 50 columns more.
        'shop' => [
                'id' => optional($contact->shop)->id,
                'name' => optional($contact->shop)>name
        ],  
        ...about 6 relations more.
    ];
});
$json = $json->paginate(50);
return response()->json(['contacts' => $json], 200);

您正在转换获取所有数据,如 1M 或它有多少条记录。然后你映射它并对其进行分页并且只得到 50。你的代码存在巨大的性能问题。

你可以这样直接调用:

return response()->json(['contacts' => Contact::with('shop')->orderBy('created_at', 'DESC')->paginate(50)], 200);

如果您只需要联系人的 ID 和姓名:

return response()->json(['contacts' => Contact::select('id', 'name', 'created_at')->orderBy('created_at', 'DESC')->paginate(50)], 200);