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 :

Comment optimiser ma requete ?


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 145
    Points : 59
    Points
    59
    Par défaut Comment optimiser ma requete ?
    Bonjour,

    J'ai fait une requete SQL sur une base qui compte 700 enregistrements (donc très petite) mais ma requête prends presque plus de 1min. je n'arrive pas à comprendre pourquoi, auriez-vous une idée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT u.id, u.initial, u.nom, u.actif, u.planning, COUNT(DISTINCT q1.id) as 'fiche', COUNT(DISTINCT q2.id) as 'dfiche', COUNT(DISTINCT q3.id) as 'sfiche', COUNT(DISTINCT q4.id) as 'hfiche'
    FROM utilisateur u
    LEFT JOIN question q1 ON u.id = q1.id_user
    LEFT JOIN question q2 ON u.id = q2.id_user AND DATE(q2.date) = DATE(now())
    LEFT JOIN question q3 ON u.id = q3.id_user AND q3.date >= DATE_SUB(now(),INTERVAL 7 DAY)
    LEFT JOIN question q4 ON u.id = q4.id_user AND DATE(q4.date) = DATE(DATE_SUB(now(),INTERVAL 1 DAY))
    WHERE u.id_groupe = 1
    GROUP BY u.id
    ORDER BY u.actif DESC, fiche DESC
    La requête consiste à récupérer le nombre de question par utilisateur, au total, par jour, la veille et par semaine.

    J'ai un champs type "index" dans id_user et date sur la table question.

    Je n'arrive pas à m'en sortir : (

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Poster le DDL de la table avec les index permattrait d'apporter des réponses plus pertinentes.

    Dans vos conditions des jointures, prédicats du genre DATE(q4.date) = DATE(DATE_SUB(now(),INTERVAL 1 DAY)) empêchent l'utilisation d'index (si tant est qu'ils existent).

    globalement, je pense que votre requete peut etre réécrite ainsi :
    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
     
    SELECT 
        u.id, 
        u.initial, 
        u.nom, 
        u.actif, 
        u.planning, 
        COUNT(DISTINCT q.id) AS 'fiche', 
        COUNT(DISTINCT CASE WHEN DATE(q.date) = DATE(now()) THEN q.id END ) AS 'dfiche', 
        COUNT(DISTINCT CASE WHEN q.date >= DATE_SUB(now(),INTERVAL 7 DAY) THEN q.id END) AS 'sfiche', 
        COUNT(DISTINCT CASE WHEN DATE(q.date) = DATE(DATE_SUB(now(),INTERVAL 1 DAY)) THEN q.id END) AS 'hfiche'
    FROM utilisateur u
    LEFT JOIN question q ON u.id = q.id_user
    WHERE u.id_groupe = 1
    GROUP BY u.id
    ORDER BY u.actif DESC, fiche DESC
    Et je pense que du coup, les DISTINCT sont inutiles, mais là encore, sans connaitre votre modèle de données, difficile d'en être certain.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 145
    Points : 59
    Points
    59
    Par défaut
    Ouah ! Parfait. même pas besoin des disctinct, c'est ultra rapide.
    Ca marche nickel

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

Discussions similaires

  1. Comment optimiser une requete Update SQL ?
    Par Battosaiii dans le forum SQL
    Réponses: 3
    Dernier message: 20/07/2011, 13h51
  2. [SQL]Comment optimiser cette requete?
    Par neeux dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/12/2008, 08h21
  3. comment optimiser cette requete Postgres?
    Par medsine dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 29/05/2008, 14h19
  4. Comment optimiser une Requete avec Count ?
    Par tavarlindar dans le forum Requêtes
    Réponses: 15
    Dernier message: 09/02/2007, 21h19
  5. Réponses: 15
    Dernier message: 14/04/2006, 15h34

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