执行以下查询大约需要 3.55 秒。显然,大部分问题是由子查询引起的,因为当我单独运行类似的查询时,它需要 0.981 秒。我已经对表格建立了索引,所以我不确定我可能做错了什么。有什么想法吗?
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_id 不可为空,则不需要对 users 表进行联接,因为您正在访问整个 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
或者,如果需要,您可以在子查询内重复连接。
关于mysql - SELECT 内的 SELECT MySQL 查询速度较慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45249488/