Есть сервис, в котором добавляется сортировка.
switch ($request->get('sort')) {
case 'rating':
$orderedQuery = $rawQuery->orderBy('rating', 'DESC');
break;
case 'price':
$orderedQuery = $rawQuery->orderBy('min_price', 'ASC');
break;
default:
$orderedQuery = $rawQuery->orderBy('internal_rating', 'DESC');
}
Все эти поля имеют индекс и одинаковый тип (double precision);
При выборе первых двух весь запрос занимает 0.3 - 0.5s, при последнем же - от 1.7s.
Причем время выполнения запросов у них не отличается - в среднем 0.1 - 0.2s (если верить дебаг бару), только в случае с `internal_rating` приложение отрабатывает дольше.
UPD: а теперь самое интересное.
internal_rating содержит числа в среднем от 50 - 2000 (~500)
rating же в свою очередь от 1 до 5 (по пятибальной шкале)
После выполнения
UPDATE doctors SET internal_rating=random();
(проставляет всем число от 0 до 1) оба запроса начинают выполняться с одинаковой скоростью.
Делаю предварительный вывод, что сортировка по большим числам в данном случае идет дольше (напоминаю, оба поля
double precision), а так же что дебагбар нагло врет про время выполнения. Во второе верится с трудом, попробую еще покопать.