|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : septembre 2005 Messages : 16 ![]() |
Bonjour à tous,
J'ai la requête suivante : Code :
Si je supprime la jointure : Code :
JOIN spectacle_person sp ON sp.idspectacle=s.idspectacle Ma table spectacle_person contient 3 champs : idspectacle => integer 11 => index/FK idperson => integer 11 => index/FK idrole => smallint 5 => index/FK la clé primaire est sur ces 3 champs. Il y a 30000 enregistrements dans cette table. Mais la table schedules en a 100000 Avez-vous une idée de pourquoi la jointure ralenti autant la requête ? En pièce jointe, l'explain de la requête. Merci d'avance |
||
|
|
00
|
|
|
#2 | ||
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
Bonjour,
Pourquoi toutes ces parenthèses dans les jointures, ce qui complique la lecture de la requête (et peut-être bien son plan d'exécution). La requête suivante devrait, à tout le moins, donner le même résultat : Code :
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : septembre 2005 Messages : 16 ![]() |
Merci pour ta réponse.
Les jointures me semblait plus "organisées" avec les parenthèses Enfin, ça ne changeait rien sans les parenthèses. Par contre, j'ai fait 2 choses : 1 - j'avais besoin d'un DISTINCT sur idspectacle et je l'ai ajouté sur sc.idspectacle = toujours le même temps d'exécution 2 - j'ai placé le DISTINCT sur le champ sp.idspectacle (SELECT DISTINCT sp.idspectacle) Et là, miracle, la requête tombe à 0,4 secondes Reste à vérifier la cohérence des résultats et surtout à essayer de comprendre le mécanisme ! |
|
|
00
|
|
|
#4 |
|
Membre confirmé
![]() ![]() Inscription : novembre 2007 Messages : 134 ![]() |
Bonjour,
Vous êtes sûr que les parenthèses ici sont inutiles ??? J'ai des doutes, j'ai l'impression qu'ici elles servent à réaliser une sorte de sous requêtes en jointure. Normalement les parenthèses vont par exemple indiquer au moteur de réaliser d'abord telle jointure entre deux tables, puis de réaliser une autre jointure entre le résultat précédent et une nouvelle table. C'est totalement différent que de laisser les deux jointures se réaliser en même temps ... |
|
|
00
|
|
|
#5 |
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
Ce sont des jointures internes... ça ne change donc rien en termes de résultats (il faudrait faire un explain pour voir si ça change quelque chose au niveau du plan d'exécution de la requête).
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com