我有以下查询连接5个InnoDB相关表以获得10行所需的结果集,我尽我所能通过添加索引和以多种不同方式重新编写查询来解决该问题,但我结束了意想不到的结果或非常缓慢的查询。提高MySQL查询性能
下面是该查询
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
目前有超过13000行中的文章表和快速增长的预期。
问题是,这个查询可能需要大量的时间来执行,大约需要3-4秒。我怀疑INNER JION引发了大部分问题,但我想我会问在这里是否有人有任何改进此查询性能的想法。
其中rc.category_id = 1那么你从相关的类别文件开始,因为你已经把它缩小到了一个。希望这是有道理的。从related_category中选择blah rc在rc.id = x.id中加入x其中rc.category_id = 1 – danny117