У меня есть структура базы данных, обслуживающая новостные статьи со следующими ассоциациями:
- HABTM news_categories
- Теги HABTM
- Загрузка HABTM
Я написал SQL-запрос, чтобы собрать все это воедино:
SELECT `news_articles`.*,
GROUP_CONCAT(DISTINCT tags.title) AS `tags`,
GROUP_CONCAT(DISTINCT tags.id) AS `tag_ids`,
GROUP_CONCAT(DISTINCT news_categories.title) AS `news_categories`,
GROUP_CONCAT(DISTINCT news_categories.id) AS `news_category_ids`,
GROUP_CONCAT(DISTINCT news_categories.slug) AS `news_category_slugs`,
`news_articles_uploads`.`caption` AS `upload_caption`,
`uploads`.`title` AS `upload_title`,
`uploads`.`basename` AS `upload_basename`,
`uploads`.`extension` AS `upload_extension`,
`uploads`.`path` AS `upload_path`
FROM `news_articles`
LEFT JOIN `news_articles_tags` ON news_articles_tags.news_article_id = news_articles.id
LEFT JOIN `tags` ON news_articles_tags.tag_id = tags.id
LEFT JOIN `news_articles_news_categories` ON news_articles_news_categories.news_article_id = news_articles.id
LEFT JOIN `news_categories` ON news_articles_news_categories.news_category_id = news_categories.id
LEFT JOIN `news_articles_uploads` ON (news_articles_uploads.news_article_id = news_articles.id AND news_articles_uploads.order = 0)
LEFT JOIN `uploads` ON news_articles_uploads.upload_id = uploads.id
WHERE (news_categories.slug IN ("category-one","category-two","category-three","category-four","category-five")) AND (news_articles.published = 1)
GROUP BY `news_articles`.`id`
ORDER BY `news_articles`.`lead_article` DESC, `news_articles`.`created` DESC LIMIT 20;
Проблема в том, что во время выполнения запроса он медленный, и в периоды занятости загрузка ЦП выходит из-под контроля.!
Вот ОБЪЯСНЕНИЕ для вышеуказанного запроса (щелкните правой кнопкой мыши на открывшейся вкладке, чтобы увидеть полный размер):

Схему можно найти здесь: http://pastie.org/private/qoe2qo16rbqr5mptb4bug
На сервере работает MySQL 5.1.55, а веб-сайт использует Zend Framework для выполнения запроса и PHP 5.2.8.
Я прошел через журнал медленных запросов MySQLи добавил недостающие индексы, насколько мне известно, но запрос все еще обнаруживается как выполнение 1-3 секунд для выполнения.Если у кого-то есть идеи, я буду очень благодарен.Заранее спасибо.