如何加速大多数Joomla 1.5 mod_mostcomment的mysql查询

时间:2015-12-12 01:04:00

标签: mysql joomla query-optimization

我有一个查询正在加载db这么多,我的托管服务提供商抱怨



SELECT count(a.id),
       a.*,
       CASE
           WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(":", a.id, a.alias)
           ELSE a.id
       END AS slug,
       CASE
           WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS(":", cc.id, cc.alias)
           ELSE cc.id
       END AS catslug
FROM jos_chrono_comments AS com,
     jos_content AS a
LEFT JOIN jos_content_frontpage AS f ON f.content_id = a.id
INNER JOIN jos_content AS c ON f.content_id = c.id
INNER JOIN jos_categories AS cc ON cc.id = a.catid
INNER JOIN jos_sections AS s ON s.id = a.sectionid
WHERE (a.state = 1
       AND s.id > 0)
  AND s.published = 1
  AND cc.published = 1
  AND a.id = com.pageid
  AND DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= c.publish_up
GROUP BY (com.pageid)
ORDER BY 1 DESC LIMIT 0,
                      10
&#13;
&#13;
&#13;

它的Joomla 1.5相关和Chronocomments模块在30天内被评论最多

我在这里有一些提示https://goo.gl/0wF2ex但是如果不使用临时表,我就不会以更好的方式回复它

寻求帮助以使查询对于mysql服务器不那么重,可能会删除group by或任何提示将是有用的

谢谢, 沃顿M0

1 个答案:

答案 0 :(得分:0)

有多种可能的答案,这是关注数据库而不改变PHP代码。

解释查询

使用MySQL EXPLAIN命令,您可以使用例如从phpMyAdmin,您可以获得MySQL本身的优化提示,主要与在需要时添加索引相关。

可能的索引

作为一个疯狂的猜测,我会确保所有以下字段都被编入索引:

  • jos_content.catid
  • jos_content.sectionid
  • jos_content.state
  • jos_content_frontpage.content_id(如果首页上有很多项目)
  • jos_categories.published(如果你有很多类别)
  • jos_sections.published(如果你有很多部分)
  • jos_chrono_comments.pageid

最后的笔记

ORDER BY 1 DESC部分对我来说似乎毫无用处。

性能的提升实际上取决于桌子的大小,所以不要期待奇迹。但它绝对值得一试。