2010-09-03 6 views
1

J'essaie de créer un système de messagerie de boîte de réception en utilisant deux tables, une appelée Message_Topic, et Message. Message_Topic contient tous les sujets créés et la table des messages contient la conversation des messages dans chaque rubrique.MySQL Messaging System Slow Query

Je suis bloqué à la sélection de tous les sujets.

Ma requête se présente comme suit:

SELECT `umt.intTopicId DE uo, utilisateur u, User_Message_Topic UMT

OÙ umt.intCreatorId = uo.intUserId ET umt.intUserToId = u.intUserId ET ((umt.intCreatorId = '1' et umt.blnReplied) OR umt.intUserToId = '1') ET blnInboxHide = false

ORDER BY dtmLastSent DESC LIMIT 0, 10`

Fondamentalement, je dois sélectionner tous les messages qui ont été envoyés à l'utilisateur "intUserToId" qui est moi OU envoyé par moi et qui a été répondu à.

Cette requête dure 0,85s, ce qui est beaucoup trop lent.

Des indices sur la façon de résoudre ce problème?

Merci d'avance.

Armin

Répondre

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 

Je ne sais pas si ce sera vraiment rapide, mais donner un coup de feu.

+0

même vitesse exacte ... le problème est le OU. toutes les colonnes nécessaires sont indexées ... le OR est le problème. Je viens de penser à quelque chose, faire une table de référence croisée avec les utilisateurs concernés et le sujet :) .. pourrait fonctionner – Armin