2017-07-22 19 views
0

次のクエリは実行に約3.55秒かかります。明らかに、問題の大部分を引き起こしているサブクエリです。なぜなら、同様のクエリを単独で実行すると0.981秒かかるからです。テーブルをインデックスに登録しているので、何が間違っているのか分かりません。何かご意見は?SELECT SELECT内に遅いSELECT MySQLクエリ

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 
+0

が鳴ります。あなたはすでにuser_idによってフィルタリングされているので、あなたはGROUP BYを削除することができます。 – Sal

+0

@Sal yeah私は両方のテーブルにインデックスを設定しています。クエリが正しく構築されている場合、サーバー全体のリソースに問題がある可能性がありますか? – Hugo

+0

おそらく。説明計画が役立つでしょう。 – Sal

答えて

0

あなたは物事を減速することができるサブクエリの「外」に関する内容、上のselect句でサブクエリに参加しています。あなたは、両方の全体(あなたが信者であることをユーザーに必要があるので、私が想定しています)FollowerRelationshipUsersテーブルをヒットしているので、あなたのインデックスが正しく設定されている、とfr .user_idがNULL可能でない場合は、インクルードは、ユーザーテーブルに参加する必要はありませんケース:参加者はCOUNTの額を変更しません。

また、必要に応じてサブクエリ内で結合を繰り返すこともできます。 ; `` ALTER TABLE FollowerRelationshipはINDEXのUSER_ID(USER_ID)を追加します:あなたは、インデックスを必要とするよう