我有users
,在多对多关系中可以属于groups
。我正在尝试检索(分页)用户所属的所有组。效果很好,但是当我有1000多个用户时,即使我一次只分页25到50,事情也会变慢。在我的用户模型上:
public function groups()
{
return $this->belongsToMany('App\Models\UserGroup', 'group_user', 'user_id', 'group_id');
}
我的查询是:
User::with('groups')->paginate(50);
因此,如果我在数据库(MySQL)中总共有大约50个用户,则一切都非常快(<= 300ms)。但是,当我添加1000时,即使我仍然只对每页最多分页50,它也会爬行(约3秒)。
实际上,大约50个TOTAL用户的正常请求是100ms,而不是300ms。
答案 0 :(得分:1)
由于Thiago Barcala的评论,我能够使用以下命令分析查询日志:
\DB::enableQueryLog();
// perform query...
var_dump(\DB::getQueryLog());
我发现了问题。基本上,我在网上论坛模型上有一个with
属性:
protected $with = [
'features',
'users'
];
因此,我有一堆用户被返回,他们正在返回其组,而每个组都在返回其中的所有用户。因此,由于这种关系(包括更多的关系),我获得了价值10MB的数据返回。我删除了with
,一切都很好。