vespa Posté 27 Mars 2007 Posté 27 Mars 2007 (modifié) Bonjour, J'ai la requete suivante (récupéré d'un script) sur mon site qui est vraiment très très longue à sortir les résultats. select pr.ffusername,pr.birth, pr.sex,pr.photo,pr.photopath from ".$prefix."_user_profile as pr,".$prefix."_user_photo as ph where pr.ffusername=ph.ffusername AND pr.approved=1 AND ph.approved=1 order by click DESC limit 0,$numberofstars Pouvez vous me dire s'il y a moyen de l'optimiser un peu pour qu'elle soit plus rapide, j'ai cherché sur le net sans trop de succès pour le moment Modifié 27 Mars 2007 par vespa
crocxx Posté 27 Mars 2007 Posté 27 Mars 2007 (modifié) Elle est déja pas mal optimisé pour ce qu'elle fait, regarde plutot du coté du serveur de base de donnée de ton hebergeur qui doit étre assez long. Modifié 27 Mars 2007 par crocxx
Dan Posté 27 Mars 2007 Posté 27 Mars 2007 Elle est optimisée pour autant que tu aies des index sur username et approved dans ces deux tables
glibre Posté 27 Mars 2007 Posté 27 Mars 2007 (modifié) slt oula, c'est fouilli tout ca ;p sans connaitre reelement le resultat que tu veux et le schema de la base, tente ca: select pr.ffusername, pr.birth, pr.sex, pr.photo, pr.photopath from ".$prefix."_user_profile prLEFT JOIN ".$prefix."_user_photo ph ON pr.approved = ph.approvedwhere pr.approved = 1 order by click DESC limit 0,$numberofstars mais effectivement, ta requete n'est pas vilaine Modifié 27 Mars 2007 par glibre
vespa Posté 27 Mars 2007 Auteur Posté 27 Mars 2007 Merci à tous pour votre aide et notamment à Dan Elle est optimisée pour autant que tu aies des index sur username et approved dans ces deux tables Il manquait effectivement les index sur ces deux champs sur les deux tables, en les ajoutant la requete est passée (lorsque je l'exécute sous phpmyadmin) de : Affichage des enregistrements 0 - 2 (3 total, traitement: 3.1886 sec.) Affichage des enregistrements 0 - 2 (3 total, traitement: 0.0146 sec.) Maintenant l'affichage est correct pour mes visiteurs sur la page utilisant cette requete, encore merci P.S. Juste pour savoir, on peut mettre autant d'index que l'on veut sur une table ?
f_trt Posté 27 Mars 2007 Posté 27 Mars 2007 Ben presque mais c'est pas le but car tu auras alors d'autre contre effet, l'imoportant c'est d'avoir des index sur tous les champs qui servent à faire des liaisons. Tu as la commande EXPLAIN aussi pout t'aider. Tu as de bonnes info ici : http://www.chevrel.org/fr/optimiser/phpmysql/ A+ Ps: si DAN repasse par là a-t-il reçu mon MP ?
maximettb Posté 27 Mars 2007 Posté 27 Mars 2007 Techniquement, tu peux mettre autant d'index que tu veux sur une table. Cependant, il vaut mieux éviter de surcharger ta base d'index. À la longue, ça occupe beaucoup trop d'espace disque et, pire, risque de rendre certaines requêtes plus longue qu'avec des index judicieusement placés ( MySQL peut assez vite cafouiller s'il est confronté à des choix d'index lorsqu'il tente d'optimiser les requêtes ) . SELECT pr.ffusername,pr.birth, pr.sex,pr.photo,pr.photopath FROM ".$prefix."_user_profile AS pr JOIN ".$prefix."_user_photo AS ph ON pr.ffusername=ph.ffusername WHERE pr.approved=1 AND ph.approved=1 ORDER BY click DESC LIMIT 0,$numberofstars À mon sens, un seul index sur ffusername de la table user_photo est suffisant.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant