我有一个包含两列 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数据库来解决这个问题?
答案 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命令