慢速选择MySQL查询内选择
执行以下查询大约需要3.55秒。显然是子查询导致了大部分问题,因为当我单独运行一个类似的查询时,它需要0.981秒。我已经为这些表编制了索引,所以我不确定我可能做错了什么。有什么想法吗慢速选择MySQL查询内选择,mysql,select,subquery,Mysql,Select,Subquery,执行以下查询大约需要3.55秒。显然是子查询导致了大部分问题,因为当我单独运行一个类似的查询时,它需要0.981秒。我已经为这些表编制了索引,所以我不确定我可能做错了什么。有什么想法吗 SELECT u.user_id, u.username, u.fullname, u.avatar, u.city, u.state, ( SELECT COUNT(*) AS total_followers FROM
SELECT
u.user_id,
u.username,
u.fullname,
u.avatar,
u.city,
u.state,
(
SELECT
COUNT(*) AS total_followers
FROM
FollowerRelationship fr
WHERE
fr.user_id = u.user_id
GROUP BY
fr.user_id
) AS total
FROM
Users u
ORDER BY
total DESC
您正在对子查询“外部”内容的select子句中加入子查询,这可能会减慢速度。如果您的索引设置正确,并且
fr
.user\u id不可为空,那么就不需要用户表上的联接,因为您正在访问整个FollowerRelationship
(我假设这是因为您需要用户成为追随者)在这两种情况下,Users
表:联接不会更改COUNT
的数量
SELECT
u.user_id,
u.username,
u.fullname,
u.avatar,
u.city,
u.state,
(
SELECT
COUNT(*) AS total_followers
FROM
FollowerRelationship fr
GROUP BY
fr.user_id
) AS total
FROM
Users u
ORDER BY
total DESC
或者,如果需要,也可以在子查询中重复连接。听起来好像需要索引:
ALTER TABLE FollowerRelationship ADD index user\u id(user\u id)代码>。顺便说一句,您可以按删除组,因为它已经由用户\u id筛选。@Sal是的,我在两个表中都设置了索引。如果查询构建正确,可能是服务器的总体资源问题吗?可能是。一个解释计划会有帮助。