|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