2010-09-03 93 views
1

我試圖創建一個使用兩個表,一個叫做Message_Topic和消息的收件箱消息系統。 Message_Topic包含所有創建的主題,而Message表包含每個主題內的消息對話。MySQL消息傳遞系統慢查詢

我被困在所有主題的選擇。

我的查詢如下:

`選擇umt.intTopicId根據用戶UO,用戶U,User_Message_Topic UMT

WHERE umt.intCreatorId = uo.intUserId AND umt.intUserToId = u.intUserId AND((umt.intCreatorId = '1' AND umt.blnReplied)OR umt.intUserToId = '1') AND blnInboxHide =假

ORDER BY dtmLastSent DESC LIMIT 0,10`

基本上,我需要選擇發送給用戶「intUserToId」的所有消息,這是我或由我發送並已答覆。

該查詢需要0.85s運行,這太慢了。

任何線索我如何解決這個問題?

在此先感謝。

阿明

回答

0
SELECT umt.intTopicId FROM User_Message_Topic umt 
LEFT JOIN User uo ON umt.intCreatorId = uo.intUserId 
LEFT JOIN User u ON umt.intUserToId = u.intUserId 
WHERE 
((umt.intCreatorId = '1' AND umt.blnReplied) OR umt.intUserToId = 1) AND 
blnInboxHide = false 
ORDER BY dtmLastSent DESC LIMIT 0,10 

我不知道這是否會是非常快的,但給它一個鏡頭。

+0

相同的確切速度......問題是OR。 所有必要的列都被索引... OR正在給出問題。 我只是想到了一些東西,與用戶的參與和主題做一個交叉引用表:) ..可能工作 – Armin 2010-09-03 05:29:30