IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Jointure de plusieurs tables qui rend le site lourd [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Points : 11
    Points
    11
    Par défaut Jointure de plusieurs tables qui rend le site lourd
    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

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Qu'est ce qui justifie ces jointures ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 107
    Points
    1 107
    Par défaut
    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.

  4. #4
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 53
    Points : 61
    Points
    61
    Par défaut
    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 sql : 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
    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

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    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
    Stay in Bed .. Save Energy

  7. #7
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de Jointure entre plusieurs tables
    Par Stouille89 dans le forum JDBC
    Réponses: 12
    Dernier message: 11/12/2007, 14h16
  2. hibernate-criteria : jointure sur plusieurs tables
    Par loic72 dans le forum Hibernate
    Réponses: 9
    Dernier message: 24/09/2007, 17h27
  3. Réponses: 1
    Dernier message: 18/07/2007, 11h58
  4. Jointures de plusieurs tables !
    Par jmarey dans le forum Requêtes
    Réponses: 6
    Dernier message: 25/05/2007, 16h54
  5. jointures de plusieurs tables
    Par ben127 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/06/2004, 14h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo