我有一个Laravel查询生成器查询,需要20多秒才能检索到~2500条记录。理想情况下,它应该花费更少的时间。我认为我的查询中的orOn连接是导致这个问题的原因。我不知道如何优化这个查询,使其执行得更快
DB::table('customer as c')->leftJoin('feedback as fr',
function($leftJoin){
$leftJoin->on('c.active_feedback_req_id_1','=','fr.id')
->orOn('c.active_feedback_req_id_2','=', 'fr.id')
->orOn('c.active_feedback_req_id_3','=', 'fr.id');
})
->leftJoin('feedback_request_status as frs', 'fr.feedback_request_status_id', 'frs.id')
->leftJoin('customer_service as cs', 'c.id', 'cs.customer_id')
->where('c.business_location_id', $request->location_id)
->where('c.is_active', 1)
->select('c.id as customer_id','c.name as customer_name','c.created_at as customer_creation_date','c.email as customer_email', 'c.phone as customer_phone','c.phone_extension as customer_phone_extension','c.whatsApp as customer_whatsApp','c.whatsApp_phone_code as customer_whatsApp_extension','active_feedback_req_id_email as email_req','active_feedback_req_id_sms as sms_req','active_feedback_req_id_whatsApp as whatsApp_req','fr.service_taken as service_taken','fr.service_provider as service_provider', 'fr.reminders_sent as reminders_sent', 'frs.status as status','frs.color_code as color_code', 'c.is_active as active_status', 'c.is_unsubscribed as is_unsubscribed','cs.service_taken as customer_service_taken', 'cs.service_provider as customer_service_provider')
->orderBy('c.created_at','DESC')
->groupBy('c.id')
->get();
请让我知道如果有人可以帮助这一点。
1条答案
按热度按时间yyhrrdl81#
我认为你可以使用渴望加载。对于所有这些左联接,您可以在客户模块中定义关系函数。
我认为你应该把它们当作独立的关系,这样称呼它们。
客户::with('getActiveFeedback1','getActiveFeedback2 ','getActiveFeedback3','getFeedbackRequestStatus ','getCustomerService','getbusinesslocation ')->where(' is_active ',1)->orderBy(' created_at ',' DESC')->groupBy('id')->get();