Requête SQL fait ramer le serveur


cloacking
WRInaute impliqué
WRInaute impliqué
 
Messages: 722
Inscription: 20 Oct 2004

Requête SQL fait ramer le serveur

Message le Lun Avr 06, 2009 18:16

Bonsoir,

Voyez vous un problème dans la requête ci dessous car lorsque je l'exécute, ça rame énormèment ?

Code: Tout sélectionner
SELECT * FROM questions
                           INNER JOIN amis ON (amis.num_membre = $_SESSION[membre]
                           OR amis.num_ami = $_SESSION[membre])
                           AND (amis.num_membre = questions.num_membre
                            OR amis.num_ami = questions.num_membre)
            WHERE questions.num_membre != $_SESSION[membre]
            ORDER BY questions.num_question DESC LIMIT 0,8

j-mi
WRInaute accro
WRInaute accro
 
Messages: 3411
Inscription: 17 Mai 2005

Re: Requête SQL fait ramer le serveur

Message le Lun Avr 06, 2009 19:06

y a quoi qui rame ?
explique en 2 mot le probleme

ps :
OR
AND
OR

meme un être humain il deviens dingue avec ce type de condition


cloacking
WRInaute impliqué
WRInaute impliqué
 
Messages: 722
Inscription: 20 Oct 2004

Re: Requête SQL fait ramer le serveur

Message le Lun Avr 06, 2009 19:26

Cette requête est appelé sur la page d'accueil et fait ramer la page au chargement :(

Du coup, pour pas que ça rame je simplifie en faisant

SELECT * FROM questions ORDER BY num_question DESC LIMIT 0,8

Et là forcèment, le chargement est rapide mais je n'obtiens pas le but recherché :(

j-mi
WRInaute accro
WRInaute accro
 
Messages: 3411
Inscription: 17 Mai 2005

Re: Requête SQL fait ramer le serveur

Message le Lun Avr 06, 2009 19:45

Retire 1 OR au hazard
et regarde un coup pour voir
test un puis teste l'autre puis tu verra
:wink:

ayor
WRInaute discret
WRInaute discret
 
Messages: 214
Inscription: 29 Oct 2008

Re: Requête SQL fait ramer le serveur

Message le Lun Avr 06, 2009 20:32

cloacking a écrit:Bonsoir,

Voyez vous un problème dans la requête ci dessous car lorsque je l'exécute, ça rame énormèment ?

Code: Tout sélectionner
SELECT * FROM questions
                           INNER JOIN amis ON (amis.num_membre = $_SESSION[membre]
                           OR amis.num_ami = $_SESSION[membre])
                           AND (amis.num_membre = questions.num_membre
                            OR amis.num_ami = questions.num_membre)
            WHERE questions.num_membre != $_SESSION[membre]
            ORDER BY questions.num_question DESC LIMIT 0,8


tu pourrais pas simplifier ton inner join... en revoyant un peu ton modele de bases de données et en simpliant le coup du num_membre et num_ami ! parce que un OR dans la jointure ca plombe tout !

sinon essaye ca dejà :

Code: Tout sélectionner
SELECT * FROM questions
               INNER JOIN amis amis1 ON amis1.num_membre = questions.num_membre
               INNER JOIN amis amis2 ON amis2.num_ami = questions.num_membre
         WHERE questions.num_membre != $_SESSION[membre]
            AND (amis1.num_membre = $_SESSION[membre]
               OR amis2.num_ami = $_SESSION[membre])
         ORDER BY questions.num_question DESC LIMIT 0,8


Borower
WRInaute passionné
WRInaute passionné
 
Messages: 2151
Inscription: 18 Avr 2005

Re: Requête SQL fait ramer le serveur

Message le Lun Avr 06, 2009 21:46

Je penses que si tu crées une vue de ta requette, et tu effectue un select * dessus, cela sera plus rapide.
Après je ne suis pas sur à 100%

ayor
WRInaute discret
WRInaute discret
 
Messages: 214
Inscription: 29 Oct 2008

Re: Requête SQL fait ramer le serveur

Message le Lun Avr 06, 2009 21:57

Borower a écrit:Je penses que si tu crées une vue de ta requette, et tu effectue un select * dessus, cela sera plus rapide.
Après je ne suis pas sur à 100%



le problème des vues c'est qu'elles sont dynamiques, donc calculées dynamiquement et donc tout aussi lentes... tu y gagneras peut-être quelque chose, mais ce sera peanuts...


Borower
WRInaute passionné
WRInaute passionné
 
Messages: 2151
Inscription: 18 Avr 2005

Re: Requête SQL fait ramer le serveur

Message le Lun Avr 06, 2009 22:25

ayor a écrit:
Borower a écrit:Je penses que si tu crées une vue de ta requette, et tu effectue un select * dessus, cela sera plus rapide.
Après je ne suis pas sur à 100%



le problème des vues c'est qu'elles sont dynamiques, donc calculées dynamiquement et donc tout aussi lentes... tu y gagneras peut-être quelque chose, mais ce sera peanuts...


Quand on fait un select sur une vue, le SGBD recalcul les résultats de la vue a chaque fois ou pas ?
Peut on lui spécifier un cache ?

ayor
WRInaute discret
WRInaute discret
 
Messages: 214
Inscription: 29 Oct 2008

Re: Requête SQL fait ramer le serveur

Message le Lun Avr 06, 2009 22:29

oui... après, la solution peut passer par une table tampon qui serait mise à jour de façon périodique.

j-mi
WRInaute accro
WRInaute accro
 
Messages: 3411
Inscription: 17 Mai 2005

Re: Requête SQL fait ramer le serveur

Message le Mer Avr 08, 2009 0:39

oui c'est nettement mieux


Borower
WRInaute passionné
WRInaute passionné
 
Messages: 2151
Inscription: 18 Avr 2005

Re: Requête SQL fait ramer le serveur

Message le Mer Avr 08, 2009 14:04

j-mi a écrit:oui c'est nettement mieux

C'est nettement mieux quoi ?
De faire une table tampon ?
Après faut voir si c'est necessaire d'avoir les bon résultats tout de suite !


mitus
WRInaute discret
WRInaute discret
 
Messages: 57
Inscription: 17 Déc 2008

Re: Requête SQL fait ramer le serveur

Message le Mer Avr 08, 2009 23:18

Si une requête rame pensez a utilisé EXPLAIN juste avant votre requête. Et la mysql va vous expliqué la requete et vous montrez la ou ca rame comme des index qui manque etc...


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités