【问题标题】:Query optimization in laravellaravel 中的查询优化
【发布时间】:2017-01-08 03:19:08
【问题描述】:

是否可以优化此查询,因为即使表中只有行,显示结果也需要很长时间。

$orders = Order::select(DB::Raw('orders.*, payments.*')) 
        ->leftJoin('payments', function($join) {
            $join->on('orders.order_id', '=', 'payments.orderID') 
                     ->orwhere('payments.processed', '=', '');            
          })
        ->orderBy('order_id', 'asc')
        ->get();

所以我在这里查询表order 和表payments。条件必须检查是否有匹配的'orders.order_id', '=', 'payments.orderID'。然后我在页面上显示结果并从两个表中选择列。

我不知道为什么这项工作如此缓慢,加载页面需要大约 10 秒并仅显示 1 个结果。网站的其他部分速度很快,即使它们必须显示来自其他表格的更多结果。

【问题讨论】:

    标签: mysql sql laravel-4


    【解决方案1】:

    这是足够简单的查询,所以没有太多优化空间。 从描述来看,尝试使用 INNER JOIN 而不是 LEFT JOIN。 如果您有大量数据,请检查列(order_id,已处理)上的必要索引是否到位。

    【讨论】:

    • 嗯,这意味着您的数据或其结构有问题。因为你有订单和付款,但它们之间并没有关联。
    • 我在那里做的是从订单中选择+从付款中选择。这是因为我想检查 order_id 是否有任何记录。如果有记录,这意味着订单已付款,我在页面上显示已付款。如果没有记录意味着不支付。这就是我加入付款表的原因,这里似乎没有任何问题。
    猜你喜欢
    • 1970-01-01
    • 2018-05-27
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 2021-08-23
    • 2017-10-07
    相关资源
    最近更新 更多