为什么求和大数据不起作用? (Laravel 5.3)

Why sum big data does not work? (Laravel 5.3)

我的代码,你可以在下面看到这个:

public function total()
{
    $query = User::limit(100000)->get();
    $total = $query->sum('total');
    dd($total);
}

dd($total)的结果不显示或为空

但是当我改变limit(50000)时,它显示结果

为什么 limit(100000) 不起作用?

注:

在firefox浏览器中,不显示任何内容

在chrome浏览器中,显示错误:

This page isn’t working

myshop.dev is currently unable to handle this request. HTTP ERROR 500

当您调用 get 时,您正在从数据库中获取所有这些记录。然后用 php 执行求和。从数据库中获取那么多记录时,您可能会超时。

为什么不在数据库中求和,然后取结果?

public function total()
{
    $total = User::limit(100000)->sum('total');
    dd($total);
}

-----编辑-----

当你执行:

$query = User::limit(100000)->get();

$query变量实际保存的是查询select * from user limit 100000的结果集。结果集是一个集合(见 collect),那么您将在服务器端执行 sum,相当于:

$sum = 0;
foreach ($user in $query) {
    $sum = $sum + $user->total;
}

最好使用适当的聚合函数在数据库中执行求和。

$total = User::limit(100000)->sum('total'); 将转换为:

select SUM(total) from user limit 1000000

如果结果为 0,可能您的列 total 的所有结果集实际上都是 0。