求一效率高的SQL,在线等
A表(用户和 用户组 关系表)
UserID GrpID
U001 G01
U002 G01
U003 G02
U004 G02
B表(用户 和用户组 接受消息表, 消息要么发送给用户,要么发送给用户组)
MsgID UserID GrpID MsgTime
1 U001 null 2009-12-04 10:10:10
1 null G001 2009-12-04 10:10:11
1 null G002 2009-12-04 10:10:12
2 null G001 2009-12-04 10:10:13
2 null G002 2009-12-04 10:10:14
如果我是用户 U001,我要得到的数据是
MsgID UserID GrpID MsgTime
1 U001 null 2009-12-04 10:10:10
2 null G001 2009-12-04 10:10:13
消息1,U001接受到,U001所在的工作组也接受到,同一消息只能以用户先接受到的为主
消息2,U001没有接受到,U001所在的工作组接受到,那么U001也可以查阅消息
关键是消息数量非常的大,如何提高效率
我只能想到,先查出UserID=U001的消息,再到所有的消息中排除刚才的消息,
用用户对应的用户组再去查一次消息,肯定要用到 not Exists 或者 not In
我感觉效率很低,尤其数据量很大,可以上千万的时候很慢,特别请教好的算法
谢谢,再次感谢!
UserID GrpID
U001 G01
U002 G01
U003 G02
U004 G02
B表(用户 和用户组 接受消息表, 消息要么发送给用户,要么发送给用户组)
MsgID UserID GrpID MsgTime
1 U001 null 2009-12-04 10:10:10
1 null G001 2009-12-04 10:10:11
1 null G002 2009-12-04 10:10:12
2 null G001 2009-12-04 10:10:13
2 null G002 2009-12-04 10:10:14
如果我是用户 U001,我要得到的数据是
MsgID UserID GrpID MsgTime
1 U001 null 2009-12-04 10:10:10
2 null G001 2009-12-04 10:10:13
消息1,U001接受到,U001所在的工作组也接受到,同一消息只能以用户先接受到的为主
消息2,U001没有接受到,U001所在的工作组接受到,那么U001也可以查阅消息
关键是消息数量非常的大,如何提高效率
我只能想到,先查出UserID=U001的消息,再到所有的消息中排除刚才的消息,
用用户对应的用户组再去查一次消息,肯定要用到 not Exists 或者 not In
我感觉效率很低,尤其数据量很大,可以上千万的时候很慢,特别请教好的算法
谢谢,再次感谢!
...全文


疑难问题
