Я нашел несколько ответов, за которыми следовал, обнаружил, что это работает локально, поэтому я поднялся до нашего тестового бокса, где я обнаружил, что запросы к этой конкретной БД длится более 1300 секунд, зайдя в mysql и * 1001. * и он висит на copying to tmp table
Это Laravel 4.2, довольно старый унаследованный код, который я просто пытаюсь стабилизировать, работая над более поздней версией. Этот код, приведенный ниже, повторяется примерно каждые 30 секунд в соответствии с api_call, что все хорошо, за исключением того, что он не завершает и не получает 504 Gateway Time-out
Я чувствую, что делаю что-то рекурсивное, или поиск в действительно большой базе данных будет проблемой здесь?
Все, что я пытаюсь сделать, это запустить groupBy, но вместо группировки по первому, который я хочу сгруппировать по последнему, на случай обновления других деталей.
Любая помощь будет высоко оценена.
public function api_prevnames()
{
if (Auth::user()->repeat_vistor == 'Y') {
$names = DB::table('visitors')
->select(DB::raw('first_name,last_name,email,car_reg,OPTIN,vistor_company'))
->where('user_id', Auth::user()->id)
->where('hidden', 0)
->where('email', '<>', '')
->whereRaw('id IN (select MAX(id) FROM visitors GROUP BY first_name, last_name, email)')
->get();
}
return JSONResponseGenerator::successResponse($names->toArray());
}
, который генерирует этот запрос
select first_name,last_name,email,car_reg,OPTIN,vistor_company from `visitors` where `user_id` = '439' and `hidden` = '0' and `email` <> '' and id IN (select MAX(id) FROM visitors GROUP BY first_name, last_name, email)
Предыдущий код выполняется за пару секунд, которые я добавил ниже:
$names = DB::table('visitors')
->select(DB::raw('first_name,last_name,email,car_reg,OPTIN,vistor_company'))
->where('user_id', Auth::user()->id)
->where('hidden', 0)
->where('email', '<>', '')
->groupBy('first_name', 'last_name', 'email')
->get();