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

标签 php mysql laravel laravel-5

所以我问这个的原因是,在我当前的应用程序 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/

相关文章:

php 函数参数默认值 - 如何知道 def.值被应用?

php - 根据 float PHP中的概率选择一个数字

PHP 和 MySQL : 2 requests or 1 request?

php - Laravel 5.8 中未找到类 'app\login'

php - 扩展 mysqli_result - 它使用 store_result() 还是 use_result()

php - 为什么 Post/Redirect/Get 模式(PRG 模式)有效?

Python MySQL 长查询插入或更新

php - 将多维数组拆分为单个数组 :PHP

php - 在 Laravel 8 中调用 null 上的成员函数 notify()

php - 为 'host' 设置默认值 `php artisan serve`