如何从巨大的表--10亿行加速JOIN和GROUP BY

时间:2014-11-05 00:13:22

标签: mysql query-optimization database nosql

我有一个包含两列 usergroups(user int,group int)的链接表,其中包含~100亿行。每列都有1亿个唯一值。在两个字段上创建索引。我必须找到属于指定组的用户数量最多的组。

我的查询是

select group_id, count(*) as cnt
  from usergroups GM
       join (select user_id from usergroups where group_id=74437 LIMIT 100) G
       on (GM.user_id=G.user_id)
 group by group_id
 having cnt > 10
 order by cnt desc;

不受子查询限制,它不起作用(超时错误)。是否可以加快此查询?或许我应该使用一些NoSql数据库来解决这个问题?

1 个答案:

答案 0 :(得分:0)

无需内/子查询。

对于特定的group_id,如果有超过10条记录则返回数据,不需要group by子句,您是否正在为特定的group_id进行分组,如果满足where和having子句,则只返回一条记录。

选择group_id,将count(*)选为cnt   来自用户组 其中group_id = 74437  group by group_id  有cnt> 10

一般情况下,获取数量大于10的群组。

选择group_id,将count(*)选为cnt   来自用户组  group by group_id  有cnt> 10 由cnt desc命令