mysql - SELECT 内的 SELECT MySQL 查询速度较慢

标签 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
        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/

相关文章:

mysql - 将 timeFrom 和 timeTo 分成小时间隔

mysql - 在忽略年份的日期范围之间选择

mysql - 改进糟糕的多子查询 SQL

mysql - 在 MySQL 中,获取接受 3 次 ANC 检查的孕妇数量

php - SELECT 语句中的交叉匹配表

mysql - 将用户名 "root"更改为 "%"后,我无法再连接到 mysql 服务器

MySQL select 语句访问列中的部分十六进制值

sql - 查找对某些零件收取高于该零件平均成本(供应该零件的所有供应商的平均值)的供应商的 SID

ruby-on-rails - 从患有特定疾病的用户那里查找疾病

php - 从数组输入数据时如何防止mysql中的重复输入?