Выполнение этого запроса на моем сайте занимает очень много времени.У меня есть блог и форум на моем сайте, которые я свободно интегрировал, поэтому каждая учетная запись на форуме имеет учетную запись в блоге и наоборот.Однако идентификаторы user_id в каждой таблице не коррелируют, поэтому я присоединяю их по имени пользователя.
SELECT *
FROM comments AS c
INNER JOIN articles AS a ON c.article_id = a.article_id
INNER JOIN user_profiles AS p ON c.user_id = p.user_id
INNER JOIN blog_users AS b ON c.user_id = b.user_id
INNER JOIN forum_users AS f ON b.username = f.username
WHERE a.article_id = :article_id
ORDER BY c.comment_id DESC
LIMIT 0 , 30
Когда я использовал объяснение в запросе, я увидел, что последнее объединение проверяет каждую строку в таблице forum_usersчтобы получить результат, который составляет более 1 000 000 строк.Столбцы имени пользователя для обеих таблиц индексируются, и все таблицы InnoDB.В качестве обходного пути я сохраняю user_id форума каждого пользователя в таблице blog_users, и наоборот, поэтому я могу присоединиться непосредственно к user_id, у которого запрос выполняется намного быстрее, но я бы хотел избежать этого, если это возможно.Есть ли способ, которым я мог бы переработать запрос, чтобы объединить имя пользователя было более эффективным?