gpt4 book ai didi

php - Laravel Eloquent withCount() 应该比 with() 慢

转载 作者:行者123 更新时间:2023-11-29 07:39:01 30 4
gpt4 key购买 nike

所以我问这个的原因是,在我当前的应用程序 withCount() 中,响应时间几乎是通过 with() 获取关系的所有数据的三倍并从前端(javascript)获取长度。我认为使用 withCount() 的目的是为了加快查询速度,但也许我错了?

例如:

courseSession::where('id', '>=', 1)
->where('id', '<=', 320)
->withCount('enrollments')
->get();

平均响应时间约为 900 毫秒(调试栏将其显示为单个数据库调用)

但是

courseSession::where('id', '>=', 1)
->where('id', '<=', 320)
->with('enrollments')
->get();

大约 350 毫秒(调试栏将其显示为两个不同的数据库调用)

模型关系定义如下:

public function enrollments()
{
return $this->hasMany(EmployeeEnrollment::class)->where('dropped', '=', null);
}

注意:已经检查过,如果我删除 where 子句,它只会加快 30 毫秒

员工登记表大约有 11k 行,我正在运行查询的模型表大约有 2k 行

这也在本地开发环境中,并在两台单独的机器上进行了测试

我对数据库的东西有点无能,所以我不确定我是否做错了什么......但是任何帮助都将不胜感激

最佳答案

不同之处在于您要求 mysql 计算语句中的每一行,而不是仅仅转储。 withCount 的意义不在于它更快,如果您只需要一个计数,它对内存的好处就更大。

例如,我与数以千计的数据丰富的项目有关系。如果我只是使用 with 然后尝试计算结果,php 将耗尽内存我永远有机会进行计数。如果我使用 withCount,只会返回一个项目,告诉我有多少项目,因此不会占用 php 内存,但所有工作都在 sql server 上完成。

关于php - Laravel Eloquent withCount() 应该比 with() 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47425371/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com