gibozsec
Messages postés318Date d'inscriptionmardi 27 mai 2003StatutMembreDernière intervention11 mars 2010
-
27 mars 2006 à 16:39
elidris
Messages postés125Date d'inscriptionlundi 15 août 2005StatutMembreDerniè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 :
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?
gibozsec
Messages postés318Date d'inscriptionmardi 27 mai 2003StatutMembreDernière intervention11 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.