codeturn
@codeturn

Как оптимизировать запрос order by в join?

Здравствуйте. Есть три таблицы:
products: [id, name]
videos: [id, name, duration*, type*, rate*]
videos_products:[product_id**, video_id**]

* - index
** - fkey

Нужно выбрать видео по разным параметрам, например товару и типу или типу и продолжительности

Вот так выглядит запрос:
SELECT * FROM videos_products vp
JOIN videos v ON v.id = vp.video_id
JOIN products pr ON pr.id = vp.product_id
WHERE v.type=1


Здесь все отрабатывает быстро, но если добавить сортировку по рейтингу:
SELECT * FROM videos_products vp
JOIN videos v ON v.id = vp.video_id
JOIN products pr ON pr.id = vp.product_id
WHERE v.type=1
ORDER BY v.rate DESC

.. то запрос отрабатывает очень долго, что в целом логично, ведь он перебирает уже все данные из дочерней таблицы.
Такая же ситуация и с group by.
Как с этим бороться? Пока придумал только дублировать нужные поля в таблицу videos_products, но как-то это не по спартански совсем =/
  • Вопрос задан
  • 254 просмотра
Пригласить эксперта
Ответы на вопрос 1
@pvh85
John Didact описал принцип правильно.

Могу ошибаться, но как то так
select * from
(
select * from videos
where videos.type = 1
order by videos.rate DESC
) v
join videos_products vp ON v.id = vp.video_id
join products pr ON pr.id = vp.product_id

т.е, вы уже джойнитесь к отфильтрованной и отсортированной выборке из videos
Ответ написан
Ваш ответ на вопрос

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

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