Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1738 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  éviter le LEFT JOIN (performance)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

éviter le LEFT JOIN (performance)

n°867044
digito
Posté le 07-10-2004 à 13:54:23  profilanswer
 

Bonjour,
 
voici mon problème:
pour simplifier, j'ai deux tables:
demande et evenement (relation 0,n et 1,1 : relation de type père-fils,
une demande peut avoir plusieurs 'evenement' mais un 'evenement' qu'une
seule 'demande').
 
maintenant je voudrais afficher tous les enregistrements des tables
demande et evenement sous la forme d'un seul tableau, et voila ou ça
coince :
1)
si je fais:
SELECT demande.iddemande,commentaireevenement FROM demande,evenement WHERE
demande.iddemande=evenement.iddemande
 
la requête est très rapide, mais si la demande n'a pas d'événement alors
les enregistrement correspondant ne seront pas affiché
 
exemple d'affichage:
iddemande|commentaireevenement
3       | blabla
7       | titi
 
donc il faut faire:
2)
SELECT demande.iddemande,commentaireevenement FROM demande LEFT JOIN
evenement ON demande.iddemande=evenement.iddemande
 
exemple d'affichage:
iddemande|commentaireevenement
1       | (null)
2       | (null)
3       | blabla
4       | (null)
5       | (null)
6       | (null)
7       | titi
 
la ça marche bien MAIS le problème c'est que la requête est très lente, et
pourtant je n'ai que 1400 enregistrements dans 'demande' et environs 500
'evenement' !!!!
j'utilise très souvent cette requête sur mon site du coup le site est lent
non pas à cause de l'html généré mais à cause des temps de réponse de la
requête. précision importante: le serveur n'est pas une charrette!!
 
Je suis certain qu'il est possible de beaucoup mieux.
 
 
Merci beaucoup d'avance pour vos réponses!! 3 jours que je bloque :(


---------------
Patrimoine et Architecture à Strasbourg http://www.archi-strasbourg.org
mood
Publicité
Posté le 07-10-2004 à 13:54:23  profilanswer
 

n°867103
Beegee
Posté le 07-10-2004 à 15:07:49  profilanswer
 

Décris les index que tu as sur ces 2 tables, parce que pour si peu de lignes, ça devrait être instantané.

n°867215
digito
Posté le 07-10-2004 à 16:59:42  profilanswer
 

Merci Beegee: QUASIMENT RESOLU !
Voici la description des tables avant intervention :
 
DESC evenement
 
idEvenement int(6)   PRI NULL auto_increment  
idDemande int(11)     0    
dateEvenement date YES   NULL    
idTypeEvenement tinyint(3) YES   NULL    
commentaireEvenement varchar(255) YES   NULL    
 
DESC demande
idDemande int(10) unsigned   PRI NULL auto_increment  
idTransaction tinyint(3) unsigned     0    
idPersonne int(10) unsigned     0    
idUser tinyint(3) YES   0    
dateDemande date     0000-00-00    
idTypebien tinyint(3) unsigned YES   NULL    
nbPieceDemande tinyint(3) unsigned YES   NULL    
budgetDemande int(10) unsigned YES   NULL    
superficieDemande int(10) unsigned YES   NULL    
villeDemande int(11) YES   NULL    
idQuartier smallint(5) unsigned YES   NULL    
lieuDemande varchar(255) YES   NULL    
descriptifDemande text YES   NULL    
commentaireDemande text YES   NULL    
idProfilDemande tinyint(3)     0    
idStatutDemande tinyint(3)     0    
 
-----------------------------------------
Après mon intervention, j'ai rajouté un index sur iddemande dans la table evenement, et maintenant ça booste enfin!!
 
MERCI mille fois :)
Cependant j'aurais quand même voulu savoir si il est possible de faire la même chose sans utilise LEFT JOIN ? ou alors est ce que cela est quand même une fonction qui est conseillé (voir obligatoire) dans un pareil cas de figure ?


---------------
Patrimoine et Architecture à Strasbourg http://www.archi-strasbourg.org
n°867613
Beegee
Posté le 07-10-2004 à 22:49:51  profilanswer
 

C'est pour ça que les jointures externes existent ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  éviter le LEFT JOIN (performance)

 

Sujets relatifs
[Java] Eviter qu'un dessin s'efface si la fenetre est recouverte...?Eviter l'affichage des fichiers d'un repertoire? [résolu]
[SQL] Comment éviter une division par 0 (zéro) --> résolu par DECODE()[MySQL] et join
[PHP] Comment éviter les Warning ?Performance des hashtables
[html]débutant inside...right-left pour des .gif[CSS] Comment éviter de tel chose si horrible ?! [Résolu]
SELECT et NULL discriminatoire [résolu]/ Cumuler L/R join [pas résolu]comment éviter d'afficher des résultats doubles ?
Plus de sujets relatifs à : éviter le LEFT JOIN (performance)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR