|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