mysql - 如何提高SQL的性能?(使用子查询)

标签 mysql sql database-performance

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/

相关文章:

mysql - 带排序的 SQL 查询

MYSQL数据库设计,大表间查询

mysql - 如何在高流量应用时 'refresh' apc缓存?

MongoDB 索引复杂度

MySQL - 如何按日期范围选择一个月的数据?

java - 使用 Hibernate 性能优化在 startIPNum 和 endIPNum 范围内查找 IP 号码

php - 使用 SQL、PHP 或 JS 解码通过 ws_concat(mysql) 连接的两个 JSON 字符串

php - 将文档总数除以包含词干的文档数

mysql - EA——生成DDL脚本

MYSQL 语法错误,意外的 IDENT_QUOTED,期望 $end