我有一个查询正在加载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;
它的Joomla 1.5相关和Chronocomments模块在30天内被评论最多
我在这里有一些提示https://goo.gl/0wF2ex但是如果不使用临时表,我就不会以更好的方式回复它
寻求帮助以使查询对于mysql服务器不那么重,可能会删除group by或任何提示将是有用的
谢谢, 沃顿M0
答案 0 :(得分:0)
有多种可能的答案,这是关注数据库而不改变PHP代码。
使用MySQL EXPLAIN
命令,您可以使用例如从phpMyAdmin,您可以获得MySQL本身的优化提示,主要与在需要时添加索引相关。
作为一个疯狂的猜测,我会确保所有以下字段都被编入索引:
ORDER BY 1 DESC
部分对我来说似乎毫无用处。
性能的提升实际上取决于桌子的大小,所以不要期待奇迹。但它绝对值得一试。