Bonjour,
Je cale depuis un moment sur un problème de jointure que je ne m'explique pas...
Je dispose d'une requête assez "gourmande" (nombreuses tables, nombreux enregistrements). Cette requête, testée dans Mysql, me renvoie (par exemple) 300 enregistrements dans un temps de traitement de 0.8900 seconde (temps tout à fait raisonnable). Je veux ajouter une jointure externe dans cette requête et le temps de traitement devient extrêmement long ! 24.8114 secondes pour une même réponse.
Principe de la requête : Afficher tous les albums de tous les dessinateurs invités sur une manifestation en précisant leur rôle et en affichant les chroniques associées aux albums.
Requête de départ (qui fonctionne très bien) :
Requête modifié pour ajouter une jointure Externe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 SELECT auteur.num_auteur, auteur.nom_auteur, auteur.prenom_auteur, auteur.pseudonyme, auteur_invite_par.num_manifestation, auteur_invite_par.presence, manifestation.num_manifestation, serie.num_de_la_serie, serie.nom_serie, serie.num_categorie, serie.aff_nom, serie.editeur_id, album.num_album, album.code_chronique_bdselection, album.code_chronique_sceneario, album.epuise, album.num_dans_la_serie, album.num_de_la_serie, date_sortie, collabore_album.num_album, collabore_album.role, editeur.editeur_id, editeur.nom_editeur, nom_categorie FROM auteur, auteur_invite_par, manifestation, album, collabore_album, editeur, categorie, serie WHERE auteur.num_auteur = auteur_invite_par.num_auteur AND auteur_invite_par.num_manifestation = manifestation.num_manifestation AND manifestation.num_manifestation = '$num_manif' AND serie.num_de_la_serie = album.num_de_la_serie AND collabore_album.num_album = album.num_album AND collabore_album.num_auteur = auteur.num_auteur AND serie.editeur_id = editeur.editeur_id AND serie.num_categorie = categorie.num_categorie ORDER BY nom_auteur, prenom_auteur, serie.num_categorie, nom_serie asc, nom_editeur asc, num_dans_la_serie asc, role
Pour faciliter la lecture, j'ai mis en rouge les modifications apportées à la requête. Je précise que le rôle de cette jointure externe est de pouvoir récupérer un code relatif à la série dans la table Rubrique sachant que certaine séries ne disposent pas de ce code donc n'ont pas d'occurrences dans la table rubrique
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 SELECT auteur.num_auteur, auteur.nom_auteur, auteur.prenom_auteur, auteur.pseudonyme, auteur_invite_par.num_manifestation, auteur_invite_par.presence, manifestation.num_manifestation, serie.num_de_la_serie, serie.nom_serie, serie.num_categorie, serie.aff_nom, serie.editeur_id, rubrique_code_bedetheque, album.num_album, album.code_chronique_bdselection, album.code_chronique_sceneario, album.epuise, album.num_dans_la_serie, album.num_de_la_serie, date_sortie, collabore_album.num_album, collabore_album.role, editeur.editeur_id, editeur.nom_editeur, nom_categorie FROM auteur, auteur_invite_par, manifestation, album, collabore_album, editeur, categorie, serie left outer join rubrique ON serie.num_de_la_serie = rubrique.num_de_la_serie WHERE auteur.num_auteur = auteur_invite_par.num_auteur AND auteur_invite_par.num_manifestation = manifestation.num_manifestation AND manifestation.num_manifestation = '$num_manif' AND serie.num_de_la_serie = album.num_de_la_serie AND collabore_album.num_album = album.num_album AND collabore_album.num_auteur = auteur.num_auteur AND serie.editeur_id = editeur.editeur_id AND serie.num_categorie = categorie.num_categorie ORDER BY nom_auteur, prenom_auteur, serie.num_categorie, nom_serie asc, nom_editeur asc, num_dans_la_serie asc, role
J'avoue ne pas comprendre pourquoi le temps de traitement augmente à ce point... Est-ce que cela est du au nombre important d'enregistrement ? Et dans ce cas, comment faire pour optimiser cette requête afin de garder des temps relativement raisonnables.
Toute aide sera la bienvenue car je tourne en rond... lol
Partager