Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
慢速选择MySQL查询内选择_Mysql_Select_Subquery - Fatal编程技术网

慢速选择MySQL查询内选择

慢速选择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

执行以下查询大约需要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\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是的,我在两个表中都设置了索引。如果查询构建正确,可能是服务器的总体资源问题吗?可能是。一个解释计划会有帮助。