Bonjour,
J’ai une requête qui fait joindre 14 table pour une recherche dans mon site a l’exécution tout le site devient lourd même pour l’autre utilisateur du site si vous avez une solution pour mon problème je serais ravis et merci d’avance
Version imprimable
Bonjour,
J’ai une requête qui fait joindre 14 table pour une recherche dans mon site a l’exécution tout le site devient lourd même pour l’autre utilisateur du site si vous avez une solution pour mon problème je serais ravis et merci d’avance
Qu'est ce qui justifie ces jointures ?
14 jointures pour une requête ne pose pas de problème.
Il faut regarder le type de jointure (externe, croisée ?), puis voir les indexs, etc.
Bref, il faudrait au moins nous montrer la requête pour essayer d'identifier le "problème" et éventuellement trouver des solutions.
Bonjour,
Merci pour votre réponse, la requête sert a faire une recherche avec plusieurs critère de recherche voici la requête :
Code:SELECT * FROM Table1 a INNER JOIN Table2 t ON a.annonces_type_transaction_id = t.transactions_id AND t.transactions_name = '' INNER JOIN Table3 m ON a.membres_id = m.membres_id INNER JOIN Table4 b ON a.annonces_type_bien_id = b.biens_id AND biens_name = '' INNER JOIN ( SELECT * FROM Table5 l INNER JOIN Table6 v ON l.localisation_ville_id = v.villes_id ) lv ON lv.annonces_id = a.annonces_id INNER JOIN Table7 l ON l.annonces_id = a.annonces_id INNER JOIN Table8 c ON c.annonces_id = a.annonces_id INNER JOIN Table9 ON ie.annonces_id = a.annonces_id INNER JOIN Table10 tr ON tr.annonces_id = a.annonces_id INNER JOIN Table11_financiere cf ON cf.annonces_id = a.annonces_id INNER JOIN Table12 dd ON dd.annonces_id = a.annonces_id INNER JOIN Table13 lp ON lp.annonces_id = a.annonces_id WHERE 1 AND lv.localisation_region_id = 1 AND lv.localisation_departement_id = 1 AND ( lv.villes_name LIKE '%L\'Abergement Clémenciat%' OR lv.ville_zipcode LIKE '%01400%' ) AND a.annonces_disponibilite LIKE '%%' AND ie.interieur_exterieur_etage = '' AND ie.interieur_exterieur_nb_niveau = ' ' AND ie.interieur_exterieur_nb_niveau LIKE '% %' AND ie.interieur_exterieur_date_construction LIKE '%%' AND annonces_validation = 1 AND annonces_publication = 1 AND TO_DAYS(NOW()) - TO_DAYS(annonces_date_expiration) <= 0 GROUP BY a.annonces_id
Salut,
A ta place, je commencerais par modifier la requête comme ci-dessous puis je lancerais un "EXPLAIN" sur la requête. Fais le et donne nous le résultat.
Code:
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
35
36
37
38
39 SELECT * FROM Table1 a INNER JOIN Table2 t ON a.annonces_type_transaction_id = t.transactions_id INNER JOIN Table3 m ON a.membres_id = m.membres_id INNER JOIN Table4 b ON a.annonces_type_bien_id = b.biens_id INNER JOIN ( SELECT * FROM Table5 l INNER JOIN Table6 v ON l.localisation_ville_id = v.villes_id ) lv ON lv.annonces_id = a.annonces_id INNER JOIN Table7 l ON l.annonces_id = a.annonces_id INNER JOIN Table8 c ON c.annonces_id = a.annonces_id INNER JOIN Table9 ON ie.annonces_id = a.annonces_id INNER JOIN Table10 tr ON tr.annonces_id = a.annonces_id INNER JOIN Table11_financiere cf ON cf.annonces_id = a.annonces_id INNER JOIN Table12 dd ON dd.annonces_id = a.annonces_id INNER JOIN Table13 lp ON lp.annonces_id = a.annonces_id WHERE lv.localisation_region_id = 1 AND lv.localisation_departement_id = 1 AND ( lv.villes_name LIKE '%L\'Abergement Clémenciat%' OR lv.ville_zipcode LIKE '%01400%' ) AND a.annonces_disponibilite LIKE '%%' AND ie.interieur_exterieur_etage = '' AND ie.interieur_exterieur_nb_niveau = ' ' AND ie.interieur_exterieur_nb_niveau LIKE '% %' AND ie.interieur_exterieur_date_construction LIKE '%%' AND annonces_validation = 1 AND annonces_publication = 1 AND TO_DAYS(NOW()) - TO_DAYS(annonces_date_expiration) <= 0 AND t.transactions_name = '' AND biens_name = '' GROUP BY a.annonces_id
autre piste d'amelioration tu jointe sur des tables avec comme critere de selection rien la construction de ta requete doit peut pouvoir être ameliorer afin de jointer seulement sur les tables ou il y a un critère de recherche
merci pour votre réponse, je viens de résoudre le problème en réglant la requête et enlever les requête imbriquer en plus mettre les condition dans leur jointure