У меня возникли трудности с оптимизацией этого запроса. То, что я пытаюсь достичь, состоит в том, чтобы объединить около 8 таблиц, из которых только около 3 таблиц содержат большие данные (1,5 м записей). Этот запрос возвращает ожидаемые записи, но занимает 1 мин для запуска, что плохо. Я знаю, что он может быть оптимизирован для выполнения гораздо лучше, PLS мне нужна помощь от вас экспертов. У меня есть индекс для полей, используемых для соединения.медленный запрос с объединениями
SELECT topic_id,
topic_title,
unit_name_abbrev,
sch_name_abbrev,
picture_small_url AS thumbnail,
profile_pix_upload_path,
first_name,
last_name,
topic_poster,
topic_replies,
topic_views,
topic_last_post_time AS topic_post_time,
sch_sub_forum_id
FROM (_sch_forum_topics
INNER JOIN _users
ON (_users.userid = _sch_forum_topics.topic_poster)
INNER JOIN _profile
ON _profile.userid = _users.userid
INNER JOIN _class
ON _users.classid = _class.classid
INNER JOIN _level
ON _class.level_id = _level.id
INNER JOIN _unit
ON _class.unitid = _unit.unitid
INNER JOIN _department
ON _unit.deptid = _department.deptid
INNER JOIN _faculty
ON _department.facid = _faculty.facid
INNER JOIN _university
ON _faculty.schid = _university.schid)
WHERE _sch_forum_topics.sch_sub_forum_id = 4
ORDER BY _sch_forum_topics.topic_last_post_time DESC
LIMIT 0, 15
Попробуйте переместить свои внутренние соединения снаружи на свой аргумент where и проверить свои индексы. Кроме того, что показывает «EXPLAIN» в запросе? – bear
Опубликовать вывод EXPLAIN наиболее похоже на то, что у него есть много записей для анализа и запросов, наиболее вероятно, что им нужно «Использовать временные файлы, используя filesort;» потому что оптимизатор MySQL основан на стоимости, поэтому он наиболее правдоподобно обращается к неправильному порядку таблицы. –
Удалите предложение order by и посмотрите, хорошо ли это, если да, разместите индекс по столбцам в порядке по предложению –