我正在制作一个用户可以互相关注的 SNS。如果用户 A 关注用户 B 并且用户 B 也关注用户 A,则他们成为 friend 。
还要考虑到一些受欢迎的人(例如电影明星)可能会被关注数十万次,但用户最多可以关注 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)
);
最佳答案
假设“最佳”指的是表现最好的,并且考虑到以下人员必须是相互的才能满足您的“ friend ”标准:
使用 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 将默认使用主键作为聚集索引,在这种情况下,它确实有很多内容。)
关于mysql - 具有相互用户关系的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11072526/