循环或SQL查询,哪个更快?

时间:2019-11-18 17:21:09

标签: php sql loops

怀疑我已经有很长时间了。我曾经读过一遍,在逐一检查记录的情况下,在代码中使用循环要比通过SQL查询进行循环更快(对数据库的访问时间比循环慢),但是我我一直在测试某些逻辑,但事实并非如此。 (从查询到基础的数据获得的返回速度更快),那么在这些情况下最佳的方法是什么?

他们提到我的情况如下:

$payMethods = PayMethod::has('payments')->get();
    $payments = collect();

    foreach ($payMethods as $payMethod) {

        $paid = 0;

        if ($payMethod->bankProvider->provider->type == 1) {
            foreach ($payMethod->payments as $payment) {
                $paid +=  $payment->price;
            }
        }

        $payments[$payMethod->name] = $paid;

    }

    return response()->json($payments);

使用sql:

$payMethods = PayMethod::has('payments')->get();
    $payments = collect();

    foreach ($payMethods as $payMethod) {

        $sql = 'SELECT ROUND(SUM(a.price), 2) AS amount FROM payments a 
                JOIN paymethods b ON a.paymethod_id = b.id
                JOIN bank_provider c ON b.bank_provider_id = c.id
                JOIN providers d ON c.provider_id = d.id
                WHERE d.`type` = 1 AND a.paymethod_id = :paymethod_id AND a.deleted_at IS NULL';

        $paid = DB::select($sql, ['paymethod_id' => $payMethod->id]);

        $payments[$payMethod->name] = $paid[0]->amount;

    }

    return response()->json($payments);

注意:测试是在chrome中进行的,并且区别明显在于支持sql的逻辑(与循环相比减少了5至6秒)。

1 个答案:

答案 0 :(得分:2)

基本上,发送一个查询比发送多个查询更好,因为mysql服务器的成本和响应时间,但是在您的情况下,您正在使用某种ORM,并且由于延迟加载,您可能将拥有N + 1(或更糟糕的是)查询(您可以阅读有关内容)