Почему при изменении сортировки приложение отрабатывает на секунду дольше?

Есть сервис, в котором добавляется сортировка.
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), а так же что дебагбар нагло врет про время выполнения. Во второе верится с трудом, попробую еще покопать.
  • Вопрос задан
  • 287 просмотров
Решения вопроса 1
slowdream
@slowdream Автор вопроса
Проблема оказалась в сериализации. У моделей с большим рейтингом было гораздо больше доп данных (что вполне логично).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
AmdY
@AmdY
PHP и прочие вебштучки
Скопируйте запрос и сделай EXPLAIN, сравните количество сканируемых строк, использование индексов и их селективность. Посмотрите количество запросов и сколько данных они возвращают.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы