我在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
有没有办法快速完成?
答案 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)
对我来说它看起来是正确的方法,但通过创建预准备语句可以更快。 例如,请参阅以下帖子。
答案 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实例...没有计数或涉及......