éviter le LEFT JOIN (performance) - SQL/NoSQL - Programmation
Marsh Posté le 07-10-2004 à 15:07:49
Décris les index que tu as sur ces 2 tables, parce que pour si peu de lignes, ça devrait être instantané.
Marsh Posté le 07-10-2004 à 16:59:42
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 ?
Marsh Posté le 07-10-2004 à 13:54:23
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