Вот мой текущий запрос:
SELECT q.type,
q.author_id author,
q.deleted,
q.deleter_id,
COUNT(DISTINCT a.id) answers_num,
COUNT(DISTINCT v.id) votes_num,
FROM qanda q
LEFT JOIN qanda a ON q.id = a.related
LEFT JOIN votes v on q.id = v.post_id
WHERE q.id = ?
Работает хорошо. Просто мне нужно добавить еще одну вещь (которая возвращает логическое значение EXISTS
) в операторе SELECT
. Это:
EXISTS (SELECT a.id, sum(vot.value) total_votes
FROM qanda q
LEFT JOIN qanda a on q.id = a.related
LEFT JOIN votes vot ON a.id = vot.post_id
WHERE q.type = 0 -- this is a question
AND a.related = 1315 -- getting answers
GROUP BY a.id
HAVING total_votes
ORDER BY total_votes DESC
LIMIT1
) as HasAUpvotedAnswer
Хорошо, это тоже хорошо работает. Но я беспокоюсь о производительности. Как вы можете видеть, JOIN
из этих двух запросов выше (которые будут объединены в конечном итоге) являются одинаковыми. Как сделать их более оптимальными?
Другими словами, как я могу объединить эти два запроса в наиболее оптимальном случае?