Добрый день, обратил внимание что на продакшне, запрос выполняется около 2 секунд.
Сайт работает на laravel и выполняется запрос описан встроенным синтаксисом.
DB::table('wheels')
->select(DB::raw('count(DISTINCT models.id) as models_count, wheels.pcd, wheels.lz'))
->leftJoin('vehicles','vehicles.id','=','wheels.vehicle_id')
->leftJoin('modifications','modifications.id','=','vehicles.modification_id')
->leftJoin('models','models.id','=','modifications.model_id')
->groupBy('wheels.pcd','wheels.lz')
->orderBy('models_count','DESC')
->get();
Запустил на локалке, тут всё оказалось хуже. 81 минуту.
Запустил отладку медленных запросов. mysql видит запрос таким:
select count(DISTINCT models.id) as models_count, wheels.pcd, wheels.lz
from `wheels`
left join `vehicles` on `vehicles`.`id` = `wheels`.`vehicle_id`
left join `modifications` on `modifications`.`id` = `vehicles`.`modification_id`
left join `models` on `models`.`id` = `modifications`.`model_id`
group by `wheels`.`pcd`, `wheels`.`lz`
order by `models_count` desc
Sending data - занимает 99.97% от времени запроса.
В таблицах много строк.
wheels - 495679
vehicles - 98088
models - 2006
modifications - 14997
Приложил схему бд.
на продакшне, запрос генерируется пару секунд. не кешировал.
на локале 81 минуту. может конечно там сервер мощнее и перемалывает))
На хостинге MySQL - 5.7.21, на локалке 5.6
Вот сам результат выполнения запроса
в нижней части страницы - Ручной подбор по разболтовке диска razboltovka.ru/