У меня есть система бронирования запросов, которая позволяет комментировать билеты. Я добавил функцию, которая показывает пользователю при входе в систему последний комментарий к любому из своих билетов в качестве подсказки, если что-либо изменилось со времени их последнего посещения. Я могу выполнить это с суб-суб-select, который отлично работает с небольшой базой данных, но я подозреваю, что он не будет масштабироваться с течением времени.Оптимизация подзапроса в MySQL
-- stage 1: all user's request ticket ids
SELECT id FROM requests WHERE username='someuser';
-- stage 2: most recent comment on all user's request ticket ids
SELECT
MAX(commented_at)
FROM
requests_comments
WHERE
request_id IN (
-- stage 1
SELECT id FROM requests WHERE username='someuser'
);
-- final stage: whole comment row of any user's most recent comment
-- on all of selected user's request tickets
SELECT
*
FROM
requests_comments
WHERE
commented_at=(
-- stage 2
SELECT
MAX(commented_at)
FROM
requests_comments
WHERE
request_id IN (
-- stage 1
SELECT id FROM requests WHERE username='someuser'
)
);
Я пытался возиться с GROUP BY
и HAVING
, но не получили, где мне нужно быть.
Кроме того, вероятность наличия нескольких комментариев в пределах одной временной метки является бесконечно малой. И ключи ключа и внешние ключи автоматически назначаются и, следовательно, нельзя доверять тому, что более высокий идентификатор более поздний, чем более низкий идентификатор.
Как я могу оптимизировать свой запрос для обеспечения производительности с течением времени?