Laravel雄辩的查询速度较慢,有100000条记录



我有一个简单而雄辩的查询,运行良好,但记录很少
当数据库增量直到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);

最新更新