SELECT contents.*,
(SELECT COUNT(*)
FROM comments
WHERE comments.scrap_id = contents.org_scrap_id) AS comment_count
FROM contents
ORDER BY comment_count
这就是我的意图。但等待时间很长。
如何提高该查询的性能?
最佳答案
您可以使用联接重写查询,但为了提高性能,需要解释计划,您正在使用将为内容表中的每一行运行的相关子查询,并且会降低查询的性能,对于以下查询,您需要一个索引对于评论表中的 scrap_id
和内容表中的 org_scrap_id
(如果它不是主键)
SELECT c.*, COUNT(cm.scrap_id) comment_count
LEFT JOIN comments cm
ON cm.scrap_id = c.org_scrap_id
FROM contents c
GROUP BY c.org_scrap_id
ORDER BY comment_count
关于mysql - 如何提高SQL的性能?(使用子查询),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23196262/