Таблицы
видео: id
рейтинги: id, video_id, user_id, рейтинг
У одного видео может быть несколько оценок. Таблица видео содержит более 10 000 строк. Для некоторых видео может еще не быть связанных с ними рейтинговых данных.
Я хочу выбрать все видео, где определенный пользователь (в данном случае user_id 1) еще не оценил.
Запрос:
SELECT
videos.id,
(SELECT count(id) FROM ratings WHERE user_id = 1 AND ratings.video_id = videos.id)
AS rating_count
FROM videos
LEFT JOIN ratings ON ratings.video_id = videos.id
GROUP BY videos.id
HAVING rating_count = 0
ORDER BY ratings.rating DESC
LIMIT 20
Запрос занимает не менее 4 секунд каждый раз. Возможно, я не должен использовать здесь левое соединение?