У меня есть таблица orders и взаимосвязь с waypoints hasMany выборку нужно отсортировать по дате точки с максимальным приоритетом, я сделал такой запрос
$query->join('waypoints', function ($join) {
$join->on('orders.id', '=', 'waypoints.order_id')
->whereRaw("waypoints.priority = (select waypoints.priority from waypoints where orders.id = waypoints.order_id order by waypoints.priority desc limit 1)");
})->orderBy('waypoints.date', 'desc')->select('waypoints.date', 'orders.*')
Я делаю эту выборку с пагинацией и laravel для пагинации берет запрос с count, и вот проблема, с этим подзапросом время выполнения count примерно 8c, а если вместо подзапроса я поставлю число, то
время запроса станет 4мс, вопрос как можно ускорить запрос? возможно можно обойтись без подзапроса? возможно ли подзапрос можно выбросить в count но использовать в выборке? или другой способ?
вот как запрос выглядит в SQL
select
count(*) as aggregate
from
`orders`
inner join `waypoints` on `orders`.`id` = `waypoints`.`order_id`
and waypoints.priority = (
select
waypoints.priority
from
waypoints
where
orders.id = waypoints.order_id
order by
waypoints.priority desc
limit
1
)