Помогите с MySQL

MySQL

Есть три таблицы - user, image, comment. Комментарий к картинке может быть удален, что фиксируется полем deleted, которое содержит дату удаления.
Нужно выбрать пользователей, которые комментировали картинку, и картинка должна содержать определенное количество неудаленных комментариев.
Вот мой запрос:
==============================
select distinct user.id from user
inner join comment on comment.user_id = user.id
where

(select image.id from image
where
(
select count(id) from comment
where
comment.image_id =image.id
and
deleted = null
) > 50
) = image.id

=============================
Проблема в том, что этот запрос на 200 000 записях работает аж 12 сек, и чем больше условие(сейчас это 50), тем дольше работает. Как его пожно сделать чтобы он работал хотябы 1-2 сек. ?

Примечание:
=====================================
Вот если кому-то понадобится

SELECT user.id FROM user
INNER JOIN comment ON user.id = comment.user_id
INNER JOIN
(SELECT c.image_id FROM comment AS c
WHERE
c.deleted = null
GROUP BY c.image_id
HAVING count(c.id) BETWEEN 30 AND 1000
) AS c_count
ON c_count.image_id = comment.image_id
WHERE comment.user_id > 0
GROUP BY comment.user_id

Выполняется за 1.3 сек, много, но лучше нежели 12, и плюс мне эта выборка не так часто нужна =)
Ответы:
Нормализация + индексьі + возможно кеширование
Индекс на поле deleted есть?


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.