Запрос медленный при выполнении NOT IN для вложенного SELECT из другой таблицы - PullRequest
1 голос
/ 26 октября 2009
SELECT problems . * , users.id AS new_user_id, users.nick AS nick
FROM problems, users
WHERE problems.deleted =0
AND problems.topic_id =1
AND problems.user_id = users.id
AND problems.id NOT
IN (
  SELECT DISTINCT (problem_id)
  FROM problems_attempted
  WHERE user_id =1
  AND total_questions = ( attempted_right + attempted_wrong + skipped )
)
ORDER BY problems.updated DESC

Можно ли оптимизировать этот запрос для повышения производительности?

1 Ответ

3 голосов
/ 26 октября 2009

Вложенные запросы всегда являются узким местом производительности.Попробуйте использовать объединение вместо

select p.*, u.* 
from problems p join users u 
on p.user_id = u.id 
join problems_attempted pa on pa.problem_id = p.id 
where not (pa.user_id = 1 
and total_questions = ( attempted_right + attempted_wrong + skipped ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...