2

ユーザー同士でフォローできるSNSを作っています。ユーザー A がユーザー B をフォローし、ユーザー B もユーザー A をフォローすると、友達になります。

また、一部の人気のある人 (映画スターなど) は数十万回フォローされている可能性がありますが、ユーザーは最大 1000 人をフォローできます。

下の表から、ユーザー 1 のすべての友達の ID を取得するのに最適な SQL クエリはどれでしょうか?

PS: MySQL 5.5 を使用しています。

これが私がこれまでに行ったことです:

SELECT followee_id AS friend_id FROM follow
    WHERE follower_id = 1 AND
        followee_id IN (SELECT follower_id FROM follow
                            WHERE followee_id = 1);


CREATE TABLE follow
(
    follower_id     INT UNSIGNED NOT NULL,
    followee_id     INT UNSIGNED NOT NULL,

    PRIMARY KEY (follower_id, followee_id),

    INDEX (followee_id, follower_id)
);
4

1 に答える 1

3

「最高」とは最もパフォーマンスが高いことを意味し、「友達」の基準を満たすためには次のことが相互に一致する必要があると仮定します。

を使用するフィルターは、フィルターを使用followee_idするよりもインデックスにヒットしますfollower_id

select 
    me.follower_id
from 
    follow me inner join 
    follow you 
  on 
      me.follower_id = you.followee_id
      and me.followee_id = you.follower_id
where 
    me.followee_id = @user

(ただし、MSSQL のような RDBMS は、デフォルトで主キーをクラスター化インデックスとして使用することに注意してください。この場合、実際にはかなりの量になります。)

于 2012-06-17T15:47:02.023 に答える