Bonjour
Voilà, je sais que le sujet a été abordé à de nombreuses reprises, mais j'aurais souhaité un petit éclairement svp.
J'ai 5 tables MySQL :
une table documents :
une table ress_etablissements :
une table ress_filieres :
une table ress_parcours_niv
et une table ress_parcours :
Sur ce, je récupère un certain nombre de données par le biais de la requête suivante :
Par souci de normalisation du code, j'ai décidé d'utiliser du INNER JOIN plutôt que de mettre mes jointures dans WHERE
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
26
27
28
29
30
31
32
33
34 $query_select_documents = " SELECT etab_nom, fil_nom, doc_titre, doc_fichier, doc_date, doc_note, doc_consult, niveau_nom, niveau_num, parcours_nom, documents.doc_id, parcours_nom_court, doc_w_date, etab_rw, fil_rw FROM documents, ress_parcours, ress_parcours_niv, ress_filieres, ress_etablissements WHERE documents.fil_id = ress_filieres.fil_id AND ress_etablissements.etab_id = ress_filieres.etab_id AND documents.niveau_id = ress_parcours_niv.niveau_id AND ress_parcours_niv.parcours_id = ress_parcours.parcours_id ORDER BY doc_date DESC LIMIT 20";
Cela donne ceci :
Cependant, après avoir utiliser microtime() pour calculer le temps de la requête, je me suis aperçu que la seconde était plus lente que la première. Certes, de pas grand chose (2 à 3ms) mais si je vise plusieurs centaines d'utilisateurs, ça va vite faire beaucoup de millisecondes.
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
26
27
28
29
30
31
32 $query_select_documents = ' SELECT ress_etablissements.etab_nom, fil_2.fil_nom, doc_titre, doc_fichier, doc_date, doc_note, doc_consult, parcNiv1.niveau_nom, parcNiv1.niveau_num, parcours_nom, documents.doc_id, parcours_nom_court, doc_w_date, etab_rw, fil_1.fil_rw FROM documents INNER JOIN ress_parcours_niv parcNiv1 ON documents.niveau_id = parcNiv1.niveau_id INNER JOIN ress_filieres fil_1 ON documents.fil_id = fil_1.fil_id, ress_filieres AS fil_2 INNER JOIN ress_etablissements ON ress_etablissements.etab_id = fil_2.etab_id, ress_parcours INNER JOIN ress_parcours_niv parcNiv2 ON parcNiv2.parcours_id = ress_parcours.parcours_id WHERE fil_1.fil_id = fil_2.fil_id AND parcNiv1.niveau_id = parcNiv2.niveau_id ORDER BY doc_date DESC LIMIT 20';
Je me demandais donc si le INNER JOIN est moins optimisé dans certain cas, si ma requête n'est pas trop optimisée ou si mes tables ne sont pas correctes. (peut être même les 3)
Pourriez vous m'aider ?
Merci.
Partager