У меня есть страница, загрузка которой занимает 37 секунд. В то время как это загружает, это привязывает использование ЦПУ MySQL через крышу. Я не написал код для этой страницы, и он довольно запутанный, поэтому причина узкого места для меня не очевидна.
Я профилировал его (используя kcachegrind) и обнаружил, что большая часть времени на странице тратится на выполнение запросов MySQL (90% времени тратится на 25 различных вызовов mysql_query).
Запросы принимают форму следующего с изменением tag_id для каждого из 25 различных вызовов:
SELECT * FROM tbl_news WHERE news_id
IN (select news_id from
tbl_tag_relations WHERE tag_id = 20)
Каждый запрос занимает около 0,8 секунды, чтобы завершить его с несколькими более длительными задержками, чтобы обеспечить достаточную меру ... таким образом, 37 секунд для полной загрузки страницы.
У меня вопрос, является ли способ, которым запрос форматируется с помощью этого вложенного выбора, вызывает проблему? Или это может быть одна из миллиона других вещей? Любой совет о том, как подойти к решению этой медлительности приветствуется.
Запуск EXPLAIN в запросе дает мне это (но я не совсем понимаю влияние этих результатов ... NULL на первичный ключ выглядит так, как будто это будет плохо, да? Количество возвращаемых результатов мне кажется высоким а в конце возвращается только несколько результатов):
1 PRIMARY tbl_news ALL NULL NULL NULL NULL 1318 Using where
2 DEPENDENT SUBQUERY tbl_tag_relations ref FK_tbl_tag_tags_1 FK_tbl_tag_tags_1 4 const 179 Using where