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

DB2 Discussion :

Optimisation du temps d'exécution d'une requête


Sujet :

DB2

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Points : 28
    Points
    28
    Par défaut Simplification Requête SQL
    Bonjour, j'ai une requête SQL qui fonctionne
    mais je n'arrive pas à la simplifier, sans modifier l'exactitude des résultats. Ca doit pas être trop dur pourtant. Je pense qu'il faut passer par l'autojointure.

    Si vous pouviez me donner un coup de main, ça serait sympa.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT SUM((FR.FRO_KM_FIN_JOUR) - (FR.FRO_KM_DEBUT_JOUR)) AS KMPERIODETOTAL,
           (SELECT SUM((FRT.FRO_KM_FIN_JOUR) - (FRT.FRO_KM_DEBUT_JOUR))
            FROM   FEUILLE_ROUTE FRT
            WHERE  FRT.ABO_CODE = 'P310') AS KMTOTALAGENT,
           (SELECT SUM(KMIA.KMJ_KM_JOUR)
            FROM   KM_JOUR AS KMIA
            WHERE  FRO_DATE BETWEEN '2007-06-02'
                                    AND '2007-12-31'
                   AND ABO_CODE = 'P310'
                   AND CAC_CODE = 'IA') AS KMPERIODEIA
    FROM   FEUILLE_ROUTE FR
    WHERE  FR.FRO_DATE BETWEEN '2007-06-02'
                               AND '2007-12-31'
           AND FR.ABO_CODE = 'P310'
    Merci

  2. #2
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    pour la rentre plus lisible déjà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select SUM((FR.FRO_KM_FIN_JOUR)-(FR.FRO_KM_DEBUT_JOUR)) as KmPeriodeTotal, (select SUM((FRT.FRO_KM_FIN_JOUR)-(FRT.FRO_KM_DEBUT_JOUR)) 
    from FEUILLE_ROUTE FRT 
    where FRT.ABO_CODE='P310') as KmTotalAgent, (select SUM(KMIA.KMJ_KM_JOUR) 
    from KM_JOUR as KMIA where FRO_DATE BETWEEN '2007-06-02' AND '2007-12-31' AND ABO_CODE='P310' AND CAC_CODE='IA') as KmPeriodeIA
    from FEUILLE_ROUTE FR
    where FR.FRO_DATE BETWEEN '2007-06-02' AND '2007-12-31' AND FR.ABO_CODE='P310'

    ensuite, tu ne veux pas nous expliquer en français ce que c'est sensé faire, et donner le DDL des tables ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Points : 28
    Points
    28
    Par défaut
    1er argument du select (as KmPeriodeTotal) : KM parcourus par un agent pour une période donnée

    2nd argument du select (as KmTotalAgent) : KM parcourus par un agent (toutes les valeurs de la tables le concernant : pas de période précise)

    3nd argument du select (as KmPeriodeIA) : KM parcourus par un agent pour une période donnée et une activité précise (CAC_CODE='IA')

    ------------------------------

    FEUILLE_ROUTE : table contenant les informations de route d'une journée pour un agent terrain. (ABO_CODE, FRO_DATE,FRO_KM_DEBUT_JOUR,FRO_KM_FIN_JOUR) : agent, date, km début journée, km fin journée

    KM_JOUR :table contenant le détail par activité des km réalisés pour un agent pour un jour donnée (CAC_CODE,ABO_CODE, KMJ_KM_JOUR) : activité (ia...), agent, kilmoètres de la journée pour l'activité en question

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Quel est :
    - la volumétrie des tables concernées
    - votre SGBD et sa version
    - votre temps d'exécution actuel ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Points : 28
    Points
    28
    Par défaut
    - SGBD : DB2 8.1
    - Volumétrie des tables concernés (plusieurs milliers de lignes : appelez à croite quotiennement pour des dizaines d'agent)
    - Temps d'éxeuctiona actuelle (5s + utilisation dans Jasper/Ireport avec d'autres requêtes) dont optimisation du tps d'éxeuction et donc de la requête nécessaire !

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Hum... rien d'affolant, ce qui justifie d'ailleurs que la norme SQL ne prévoit pas grand chose à optimier dans votre requête.
    En tout cas, sans retoucher le modèle, je ne vois pas ce qui pourrait être améliorer ici.
    Les fonctions d'aggréagation sont coûteuses donc vous faîtes 3 appels dans la même requête donc vous en payez le prix

    Pour les 2 requêtes de la clause SELECT l'une d'entre elle opère sur une table différente de la table de la requête principale et l'autre ne possède pas les mêmes conditions que la requête principale

    Je peux déplacer votre discussion dans le forum DB2 si vous le souhaitez ?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Points : 28
    Points
    28
    Par défaut
    En effet, rien d'affolant, mais comme je ne maitrise pas sur le bout des doigts le langage SQL, je m'interrogeais sur le fait que cette requête puisse être optimisé ? Les temps d'execution sont pour le moment correct, mais à terme, ils devraient logiquement s'allonger. Si quelqu'un à d'éventuelles solutions, n'hésitez pas !

    Merci.

    Vous pouvez éventuellement déplacer la requête sur le forum DB2

Discussions similaires

  1. Calculer le temps d'exécution d'une requête
    Par BRAUKRIS dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 16/03/2007, 12h59
  2. Comment optimiser les temps de réponse d'une requête ?
    Par renaudjuif dans le forum Requêtes
    Réponses: 3
    Dernier message: 19/02/2007, 14h12
  3. [MySQL] Temps d'exécution d'une requête
    Par eon-of-the-scorn dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/07/2006, 11h06
  4. Réponses: 9
    Dernier message: 20/06/2005, 12h17
  5. Affichage du temps d'exécution d'une requête
    Par milka dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/03/2004, 17h48

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