读书人

|M| 想做MSDN里面的那个quot;你有新的消息

发布时间: 2011-12-31 23:50:30 作者: rapoo

|M| 想做MSDN里面的那个"你有新的消息" 在SQL中我用Not in 来查询 要是数据库大的话怎么办
如我数据库
Message --信息表
MessageID To Title ....
1 3 ..
2 3 ..
3 3 ..

MessageRead --用户读过的信息
MessageID ReadUserID
1 3
2 3
-----------------------------
字段说明
MessageID 为信息主键
To 为接收的用户
ReadUserID 为读取该信息的用户
-----------------------------------------
然后我用SQL语句来查询出用户是否有未读信息
SELECT COUNT(MessageID) AS COUNT
FROM Message
WHERE (MessageID NOT IN
(SELECT MessageID
FROM MessageRead
WHERE ReadUserID = 3)) AND [To] = 3
----------------------------------------
这样可以查询到还有一条没有读取到
但是听说Not in 的效率不是很好
如果有100W条数据的话 这个东西好像会挂掉

大家有什么好的解决方案

谢谢

[解决办法]
select count(*) from Message a left join MessageRead b on a.MessageID=b.MessageID
where [To]= 3 and ReadUserID!=3

[解决办法]
LZ既然到解方案。我就句。
LZ的做好,因此SQL句再好,也法到最的效率。
其表,一表就了,如下表
1. 其中Read是一志(Bit型),用表示是否已
2. 不需要ReadUserId字段,消息除了本人查看,允其他人看?
Message --信息表
MessageID Send To Title Read ....
1 2 3 1 ..
2 4 3 0 ..
3 5 3 0 ..
一表,可以非常的出未消息,性能然也是最的

SQL code
SELECT   COUNT(*)   AS   COUNT FROM   Message WHERE   To = 3 AND  Read=0 

读书人网 >asp.net

热点推荐