用于查找两个特定组中的用户数的SQL查询

时间:2011-06-16 00:43:20

标签: mysql sql

我在MySQL数据库中有两个整数列的表,例如:

userid | GROUPID
10 | 300个
11 | 300个
11 | 301个
12 | 302个

考虑到两个groupid,我正在寻找最好和最快捷的方法来查找两个组中的用户ID。我的表包含23M行,我需要为每个不同的groupid对。目前这两列都已编入索引,但是即使对于一对组也需要很长时间才能获得结果,并且我有1000个不同的groupid。我现在正在运行的查询是:

select count(t2.userid) 
from usergroup t1, usergroup t2 
where t1.groupid = 27 and t2.groupid = 714 and t1.userid = t2.userid

有没有办法快速完成?

3 个答案:

答案 0 :(得分:2)

为何加入?

select 
  u.userid
from
  usergroup u
where
  u.groupid in (27, 714)
group by
  u.userid
having 
  count(u.userid) > 1

假设userid和groupid的组合是唯一的,我认为它应该在这样的表中。

答案 1 :(得分:0)

对我来说它看起来是正确的方法,但通过创建预准备语句可以更快。 例如,请参阅以下帖子。

How can I prevent SQL injection in PHP?

答案 2 :(得分:0)

我认为这可能就是你要找的......

select
     u1.userID
   from
      usergroup u1
         join usergroup u2
            on u2.groupid = 714
           AND u1.userid = u2.userid
   where
      u1.groupid = 27

因此,主WHERE子句只是给我一个组ID = 27的用户列表...所以这将仅在GROUP ID上进行优化。然后,通过对由相同用户ID和组ID = 714匹配的用户组表进行自联接,如果找到这样的IS,它将仅返回记录。我可以在BOTH Group AND User上有一个复合索引,例如

KEY GroupUser(groupid,userid)

这样,索引将针对BOTH查询组件进行优化...

在MOST,它将为第27组中的每个人一次性完成第一次u1实例...没有计数或涉及......