Laravel关系查询需要较长时间

问题描述 投票:0回答:2

在我的数据库有服务,交易和供应商调整table.Service表有23行和事务表有更多的则二十万行和厂商调整表有30000行。

我的查询

$transactions = Service::withCount(['transactions as totalOrder','transactions as amount' =>
 function($query) use ($queryDate){
    $query->whereIn('status',['Success','Pending','Successful','Processing']);
    $query->whereDate('created_at','>=', $queryDate);
    $query->select(DB::raw('SUM(deducted)'));
},'vendorAdjustment as adjustmentPoint' => function($query) use ($queryDate){
    $query->whereDate('created_at','>=', $queryDate);
    $query->select(DB::raw("SUM(amount)"));
}])->get();

现在我上面的查询需要很长的时间。我无法理解如何优化它。

laravel laravel-5 laravel-4 eloquent laravel-5.2
2个回答
0
投票

用这个:

$transactions = Service::withCount(['transactions as totalOrder','transactions as amount' =>
        function($query) use ($queryDate){
            $query->whereIn('status',['Success','Pending','Successful','Processing']);
            $query->whereDate('created_at','>=', $queryDate);
        },'vendorAdjustment' => function($query) use ($queryDate){
        $query->whereDate('created_at','>=', $queryDate);
    }])->get();

0
投票

我可以看到什么不对您的查询。这个问题可能是你缺乏对数据库具体指标。我asumme是因为whereDate('created_at', $queryDate)将转化为WHERE DATE(created_at) >= '$queryDate'具有提取所有时间戳/日期记录的实际日期表,然后才能执行比较。在created_at列添加一个索引将使数据库更加容易的任务,虽然它有上插入,更新和删除有轻微的影响。

因此我最好的猜测:增加对transactions.created_attransactions.statusvendor_adjustments.created_at指标。

© www.soinside.com 2019 - 2024. All rights reserved.