【问题标题】:Why does using sum using get take so long?为什么使用 sum 使用 get 需要这么长时间?
【发布时间】:2017-09-16 14:41:04
【问题描述】:

我有 10.000 件物品。 当我sum() 不使用get() 时:

$total_salary = Employee::where('year','=', '2017')
    ->sum('total_salary');

$total_bonus = Employee::where('year','=', '2017')
    ->sum('total_bonus');

return ['total_salary'=>$total_salary, 'total_bonus'=>$total_bonus];

需要 6 秒。

当我像这样sum()get() 时:

$query = Employee::where('year','=', '2017')
             ->get();

$data['total_salary'] = $query->sum('total_salary');
$data['total_bonus'] = $query->sum('total_bonus');

return $data;

需要 20 秒。 我如何在不等待这么长时间的情况下使用sum()get()

【问题讨论】:

标签: laravel sum laravel-5.3 laravel-eloquent bigdata


【解决方案1】:

编辑:对不起,我误解了你的问题。

但原因是第二个是用 Collection 库做 sum 并且成本很高。

当您在 get 函数之后调用 sum 时,您正在使用 Illuminate\Support\Collection 进行求和,这就是它需要这么多的原因。

让我们使用数据库对其进行求和:

$result = Employee::where('year','=', '2017')
    ->select(
        \DB::raw('sum(total_salary) as total_salary'),
        \DB::raw('sum(total_bonus) as total_bonus')
    )
    ->get();

echo $result->total_salary;
echo $result->total_bonus;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 2021-11-13
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    相关资源
    最近更新 更多