Optimisation de requete

gibozsec Messages postés 318 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 11 mars 2010 - 27 mars 2006 à 16:39
elidris Messages postés 125 Date d'inscription lundi 15 août 2005 Statut Membre Dernière intervention 9 octobre 2007 - 4 avril 2006 à 00:57
Bonjour

J'ai un soucis avec une opération sur une base de données. J'explique le problème.

J'ai deux tables, pour simplifier je ne donne que les champs utiles :

messages : id_mess, corp_mess, date_creation
liste_mess : id_liste, id_mess, id_user

Lorsqu'un utilisateur envoi un message, une ligne contenant le corps du message et la date est créée dans la table message, et pour chaque destinataire une ligne est créée dans la table liste_mess.

Envoyer un message à 2 personnes génère une ligne dans messages et deux dans liste_mess. L'interet étant de ne stoker qu'une fois le corps du message.

Si un utilisateur supprime le message de sa boite mail, la ligne correspondante est supprimée dans liste_mess. Elle ne l'est pas dans messages puisque le message doit encore être disponnible pour les autres destinataires.

Le soucis étant que si tous les utilisateurs suppriment leur message, il reste un enregistrement fantôme dans la table messages. Cet enregistrement doit rester pour des raisons de sauvegarde mais doit être supprimé au bout d'un délai.

J'essaye de faire une requete me donnant la liste des messages de la table "messages" qui n'ont plus de correspondance dans la table "liste_mess" et datant de plus de X jours (le delai importe peu c'est pour l'exemple).

Sachant que ces deux tables contiennent déja plusieurs milliers de lignes ce que j'ai testé s'est montré trop lourd et à planté easyphp.

Quelqu'un aurait il une idée, fonctionelle et optimisée pour me permettre d'effacer mon surplus?

[B)][red]Grrrrrrrrrrr/red[B)]

5 réponses

sidf Messages postés 1216 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 18 octobre 2012 5
27 mars 2006 à 16:47
salut,

genre

"Select id_mess From messages Where id_mess Not In (Select id_mess From liste_mess)
and date_creation<'$tadate_butoir' ";
0
gibozsec Messages postés 318 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 11 mars 2010
27 mars 2006 à 17:07
"Select id_mess From messages Where id_mess Not In (Select id_mess From liste_mess)
and date_creation<'$tadate_butoir' ";

Cette requete fonctionne, nous sommes d'accord. Mon problème est que la taille des deux tables engendre un temps d'execution très long.

Par exemple en ajoutant LIMIT 0,100 (donc juste les 100 premiers enregistrements), la requete met entre 1minute30 et 2 minutes à s'executer.

Est il possible de l'optimiser, ou d'utiliser une autre méthode (pas forcement en sql) pour accelerer le traitement.

J'ai essayer de traiter les données par plage de 100 avec refresh de la page en javascript pour passer à la plage suivante mais ça reste extrèmement lent.

Grrrrrrrrrrr
0
sidf Messages postés 1216 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 18 octobre 2012 5
27 mars 2006 à 17:39
"Par exemple en ajoutant LIMIT 0,100 (donc juste les 100 premiers enregistrements), la requete met entre 1minute30 et 2 minutes à s'executer."

c'est enorme, ce ne serait pas plutot les structures des tables qu'il faudrait optimiser ?
parce que là je pense qu'il y a un gros pb...
0
gibozsec Messages postés 318 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 11 mars 2010
27 mars 2006 à 18:08
J'ai déja optimisé les tables. A titre indicatif j'ai 400 000 lignes dans chaque table ca vient peut etre de la.

Grrrrrrrrrrr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
elidris Messages postés 125 Date d'inscription lundi 15 août 2005 Statut Membre Dernière intervention 9 octobre 2007
4 avril 2006 à 00:57
salut,
en fait je pense qu'il faut tout simplement que tu index tes tables, surtout pour les champs WHERE,


tu dois creer un index sur id_mess et sur date_creation,

ca devrais reduire tes requetes de quelques milliers de lignes !!!!

"La vie, c'est pour la vie..."
http://proverbe.intoxmatique.com
0
Rejoignez-nous