2010-09-03 90 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