在我的数据库有服务,交易和供应商调整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();
现在我上面的查询需要很长的时间。我无法理解如何优化它。
用这个:
$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();
我可以看到什么不对您的查询。这个问题可能是你缺乏对数据库具体指标。我asumme是因为whereDate('created_at', $queryDate)
将转化为WHERE DATE(created_at) >= '$queryDate'
具有提取所有时间戳/日期记录的实际日期表,然后才能执行比较。在created_at
列添加一个索引将使数据库更加容易的任务,虽然它有上插入,更新和删除有轻微的影响。
因此我最好的猜测:增加对transactions.created_at
,transactions.status
和vendor_adjustments.created_at
指标。