我正在优化对MySQL的查询和我的慢查询日志显示我的WordPress插件“更好的WordPress最近评论”显示最近5条最新评论的组件帖子,使用1.26秒查询网站很长一段时间的数据库 - 特别是当下一个网站只需点击一下即可。优化WordPress插件中的慢查询“更好的WordPress最近的评论”
这里是慢查询:
Query_time:1.265625 Lock_time:0.000000 Rows_sent:6 Rows_examined:288634
SET时间戳= 1443741678;
SELECT wpcoms.*
FROM (
SELECT *,
@num := if(@post_id = comment_post_ID, @num + 1, 1) as row_number,
@post_id := comment_post_ID as cpID
FROM wp_comments
WHERE comment_approved = 1 ORDER BY comment_post_ID DESC,
comment_ID DESC
) as wpcoms
WHERE wpcoms.row_number <= 2
ORDER BY wpcoms.comment_date DESC
LIMIT 6;
行检查说288.634,但我的数据库只包含96.000评论。这当然应该有可能改进,以便在短时间内实际检查几条评论,因为它只显示了最近发布的几条评论。谢谢。
由命令的两个顺序对我来说是可疑的,并确保您的comment_approved和comment_approved字段被索引。你可以做这个没有子选择?你为什么需要row_number?似乎在子查询中唯一的一点是产生row_number – markg
如果是这种情况(https://codex.wordpress.org/Transients_API),将结果放入'transient'缓存中。还要确保查询过程中不存在'sql_calc_found_rows',因为这会在很大程度上影响性能。 – Musk