要高效统计每个用户关联的唯一用户数量,可以使用MySQL的聚合函数和分组查询。假设你有一个表 user_relations
,其中包含两个字段:user_id
和 related_user_id
,表示用户之间的关联关系。
CREATE TABLE user_relations (
user_id INT,
related_user_id INT
);
统计每个 user_id
关联的唯一 related_user_id
的数量。
SELECT
user_id,
COUNT(DISTINCT related_user_id) AS unique_related_users
FROM
user_relations
GROUP BY
user_id;
COUNT(DISTINCT related_user_id)
: 统计每个 user_id
关联的唯一 related_user_id
的数量。GROUP BY user_id
: 按照 user_id
进行分组,以便对每个用户进行统计。索引: 确保 user_id
和 related_user_id
上有索引,以加快查询速度。
CREATE INDEX idx_user_id ON user_relations(user_id);
CREATE INDEX idx_related_user_id ON user_relations(related_user_id);
分区表: 如果数据量非常大,可以考虑对表进行分区,以提高查询性能。
缓存结果: 如果统计结果不经常变化,可以将结果缓存到另一个表中,避免每次查询都进行全表扫描。
假设 user_relations
表中有以下数据:
INSERT INTO user_relations (user_id, related_user_id) VALUES
(1, 2),
(1, 3),
(1, 2), -- 重复的 related_user_id
(2, 1),
(2, 3),
(3, 1),
(3, 2);
执行上述SQL查询后,结果可能如下:
+---------+---------------------+
| user_id | unique_related_users |
+---------+---------------------+
| 1 | 2 |
| 2 | 2 |
| 3 | 2 |
+---------+---------------------+
通过使用 COUNT(DISTINCT column)
和 GROUP BY
,可以高效地统计每个用户关联的唯一用户数量。结合索引和分区表等优化手段,可以进一步提升查询性能。