У меня есть следующий запрос, который объединяет 5 связанных с InnoDB таблиц, чтобы получить желаемый набор результатов из 10 строк. Я сделал все возможное, чтобы решить проблему, добавив индексы и переписав запрос разными способами, но Я закончил либо неожиданный результат, либо очень медленный запрос.Улучшение производительности MySQL Query
ЗДЕСЬ В запросе
SELECT
a.*,
c.id as category_id,
c.title as catname,
CONCAT(u.fname, ' ', u.lname) as username,
DATE_FORMAT(a.created, '%W %M %d, %Y - %T') as long_date,
DATE_FORMAT(a.created, '%d/%m/%Y - %T') as short_date,
(SELECT
COUNT(article_id)
FROM
comment
WHERE
article_id = a.id) as totalcomments,
YEAR(a.created) as year,
MONTH(a.created) as month,
DAY(a.created) as day
FROM
article as a
INNER JOIN
article_related_categories rc ON a.id = rc.article_id
LEFT JOIN
category as c ON c.id = rc.category_id
LEFT JOIN
user as u ON u.id = a.user_id
WHERE
rc.category_id = 1
AND a.created <= NOW()
AND (a.expire = '0000-00-00 00:00:00'
OR a.expire >= NOW())
AND a.published IS NOT NULL
ORDER BY a.created DESC
LIMIT 0 , 10
Click Here to see the explain screenshot
В настоящее время существует более 13 000 строк в таблице статьи и быстрый рост, как ожидается.
Проблема в том, что этот запрос может занять значительное количество времени, и это занимает около 3-4 секунд. Я подозреваю, что INNER JION вызывает большую часть проблемы, но я подумал, что спрошу здесь, есть ли у кого-нибудь идеи по улучшению производительности этого запроса.
Где rc.category_id = 1 ну, вы начинаете с связанного файла категорий, потому что вы уже сузились до одного. Надеюсь, это имеет смысл. выберите blah из related_category rc join x на rc.id = x.id где rc.category_id = 1 – danny117