插件窝 干货文章 MySQL数据库如何高效统计每个用户关联的唯一用户数量?

MySQL数据库如何高效统计每个用户关联的唯一用户数量?

user related id relations 620    来源:    2025-03-15

要高效统计每个用户关联的唯一用户数量,可以使用MySQL的聚合函数和分组查询。假设你有一个表 user_relations,其中包含两个字段:user_idrelated_user_id,表示用户之间的关联关系。

表结构示例

CREATE TABLE user_relations (
    user_id INT,
    related_user_id INT
);

目标

统计每个 user_id 关联的唯一 related_user_id 的数量。

SQL查询

SELECT 
    user_id, 
    COUNT(DISTINCT related_user_id) AS unique_related_users
FROM 
    user_relations
GROUP BY 
    user_id;

解释

  1. COUNT(DISTINCT related_user_id): 统计每个 user_id 关联的唯一 related_user_id 的数量。
  2. GROUP BY user_id: 按照 user_id 进行分组,以便对每个用户进行统计。

优化建议

  1. 索引: 确保 user_idrelated_user_id 上有索引,以加快查询速度。

    CREATE INDEX idx_user_id ON user_relations(user_id);
    CREATE INDEX idx_related_user_id ON user_relations(related_user_id);
    
  2. 分区表: 如果数据量非常大,可以考虑对表进行分区,以提高查询性能。

  3. 缓存结果: 如果统计结果不经常变化,可以将结果缓存到另一个表中,避免每次查询都进行全表扫描。

示例数据

假设 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,可以高效地统计每个用户关联的唯一用户数量。结合索引和分区表等优化手段,可以进一步提升查询性能。