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 :

Comment optimiser ce code


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 165
    Par défaut Comment optimiser ce code
    Bonjour,
    Notre hébergeur m'informe que cette requette
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $sql = "SELECT DISTINCT COUNT(co.tb_modeles_id_modele) as nbre0, mo.id_modele,mo.fd_modele,mo.tb_marques_id_marque,co.tb_modeles_id_modele,ma.id_marque,ma.fd_marque
    		FROM tb_modeles AS mo
    		LEFT JOIN tb_combinaisons AS co ON mo.id_modele=co.tb_modeles_id_modele
    		LEFT JOIN tb_marques AS ma ON mo.tb_marques_id_marque=ma.id_marque
    		WHERE ma.fd_marque LIKE '".$mmarque."'
    		GROUP BY mo.fd_modele
    		ORDER BY mo.fd_modele";
     
    $query = mysql_query($sql)or die(mysql_error());
    $nb = mysql_num_rows($query);
    prend beacoup de ressource.

    je suis allé dans slowlog.log et je peux voir qu'elle est solcicité 12 fois et qu'à chaque fois le query time est de 124


    Time: 150125 9:53:30
    # User@Host: nau[nau] @ localhost []
    # Query_time: 124 Lock_time: 0 Rows_sent: 6414 Rows_examined: 237466986
    use battxxxxxx;
    SELECT DISTINCT COUNT(co.tb_modeles_id_modele) as nbre0, mo.id_modele,mo.fd_modele,mo.tb_marques_id_marque,co.tb_modeles_id_modele,ma.id_marque,ma.fd_marque
    FROM tb_modeles AS mo
    LEFT JOIN tb_combinaisons AS co ON mo.id_modele=co.tb_modeles_id_modele
    LEFT JOIN tb_marques AS ma ON mo.tb_marques_id_marque=ma.id_marque
    GROUP BY mo.fd_modele
    ORDER BY mo.fd_modele;
    # Time: 150125 9:55:27
    Il faut savoir que my table tb_combinaisons contient 32000 enregistrements

    Es-ce que ce je peux encore optimiser cette requette?

  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
    Par défaut
    La requête que tu nous montres n'est pas la meme que dans le log.
    Il faudrait que tu vois quel aspect de la requête est lent : le count, le distinct, la jointure ?
    C'est quand même étrange de faire un DISTINCT sur un COUNT
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 165
    Par défaut
    La requête que tu nous montres n'est pas la meme que dans le log.
    Oups pardon, je me suis trompé. J'ai corrigé mon premier post
    Il faudrait que tu vois quel aspect de la requête est lent : le count, le distinct, la jointure ?
    Ben c'est ca mon probleme, je ne sais pas comment distinguer ceci.
    C'est quand même étrange de faire un DISTINCT sur un COUNT
    Le but de ceci est compter le nombre de modele enregistrés pour une marque. J'ai fait ceci pourqu'on ne puisse pas effacer un modèle s'il est deja enregistré, au moins pour une marque. Par la meme occasion, j'affiche le résultat à cote du modèle.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,$on ne voit pas dans le log la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE ma.fd_marque LIKE '".$mmarque."'
    La requête fournie dans le log renvoie toute la table (36000 lignes).

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 165
    Par défaut
    Bonjour,
    Excusez-moi, j'ai du encore une fois vous fournir un muavaise code .
    Je vais regardé ceci plus tard et faire plus attention. Milles excuses

    (Dans tous les cas, la bonne requete est quasi identique.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 101
    Par défaut
    Bonjour,

    Dans cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sql = "SELECT DISTINCT COUNT(co.tb_modeles_id_modele) as nbre0, mo.id_modele,mo.fd_modele,mo.tb_marques_id_marque,co.tb_modeles_id_modele,ma.id_marque,ma.fd_marque
    		FROM tb_modeles AS mo
    		LEFT JOIN tb_combinaisons AS co ON mo.id_modele=co.tb_modeles_id_modele
    		LEFT JOIN tb_marques AS ma ON mo.tb_marques_id_marque=ma.id_marque
    		WHERE ma.fd_marque LIKE '".$mmarque."'
    		GROUP BY mo.fd_modele
    		ORDER BY mo.fd_modele";
    On voit que tu effectue un filtrage sur le champs "ma.fd_marque", il est donc étrange que la table tb_marque soit jointe en LEFT JOIN plutôt qu'en INNER JOIN puisque ton filtrage excluera de toute façon les lignes ne matchant pas la jointure.

Discussions similaires

  1. comment optimiser le code avec visual c# ?
    Par isoman dans le forum C#
    Réponses: 8
    Dernier message: 30/10/2008, 15h05
  2. comment optimiser le code avec eclipse ?
    Par isoman dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 28/10/2008, 16h36
  3. Comment optimiser ce code?
    Par BnA dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 21/07/2007, 12h25
  4. comment optimiser son code en calcul ???
    Par gronaze dans le forum C
    Réponses: 5
    Dernier message: 21/03/2006, 10h41
  5. [Perf] Comment optimiser son code ?
    Par Frifron dans le forum Général Java
    Réponses: 12
    Dernier message: 11/08/2005, 09h05

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