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

Requêtes MySQL Discussion :

Optimisation de requête


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Par défaut Optimisation de requête
    Bonjour,

    Ci dessous une requête SQL qui semble lourde et possible d'améliorer. Actuellement à chaque visite du site elle lit 209686 lignes pour en sortir 10.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql_query  = "SELECT news.*,categorie.icone,count(com_news.id_news),categorie.nom_jeu FROM `news` ";
    $sql_query .= "LEFT JOIN affiche ON news.id = affiche.id_affiche_item ";
    $sql_query .= "LEFT JOIN categorie ON categorie.id_categorie = news.categorie ";
    $sql_query .= "LEFT JOIN com_news ON news.id = com_news.id_news ";
    $sql_query .= "WHERE id_pageune='0' ";
    $sql_query .= "AND (publier=1 OR publier=5)  ";
    $sql_query .= "ORDER BY date  ";
    $sql_query .= "DESC LIMIT 0,10  ";
    N'ayant aucune idée de comment l'améiorer, je me tourne vers vous : ))

    Merci d'avance !

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Bonjour,

    Il va falloir nous donner quelques indications : la structure des tables, le but de cette requête et, éventuellement, quelques données exemple...
    Le premier problème que je vois dans cette requête, c'est qu'elle a un COUNT et pourtant aucun GROUP BY... Si MySQL permet cette "entorse" à la norme SQL, il vaut mieux éviter de l'employer (même à bon escient, je pense), parce qu'il n'y a pas de garantie sur les autres informations associées au COUNT.

    Bref, que doit faire cette requête ?

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Par défaut
    Récupérer des news pour les afficher.

    Pour le moment je m'en sort avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql_query  = "SELECT news.*,categorie.icone,categorie.nom_jeu FROM `news` ";
    $sql_query .= "LEFT JOIN categorie ON categorie.id_categorie = news.categorie ";
    $sql_query .= "WHERE id_pageune='0' ";
    $sql_query .= "AND (publier=1 OR publier=5)  ";
    $sql_query .= "ORDER BY date  ";
    $sql_query .= "DESC LIMIT 0,10  ";
    et le count je le fait plus tard puisque ça ajoutait une jointure, et que ça comptait les commentaires de TOUTE les news, pour au final n'en prendre que 10. Donc je prends les 10 avant de compter les commentaires maintenant.

    Au final je ne pense pas qu'on puisse faire mieux non ?

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Si, on peut améliorer encore une condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND (publier=1 OR publier=5)
    A remplacer par :
    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Par défaut
    ok nikel, merci

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

Discussions similaires

  1. [Access] Optimisation performance requête - Index
    Par fdraven dans le forum Access
    Réponses: 11
    Dernier message: 12/08/2005, 14h30
  2. Optimisation de requête avec Tkprof
    Par stingrayjo dans le forum Oracle
    Réponses: 3
    Dernier message: 04/07/2005, 09h50
  3. Optimiser une requête SQL d'un moteur de recherche
    Par kibodio dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/03/2005, 20h55
  4. optimisation des requêtes
    Par yech dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 21/09/2004, 19h03
  5. Optimisation de requête
    Par olivierN dans le forum SQL
    Réponses: 10
    Dernier message: 16/12/2003, 10h09

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