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

SQL Oracle Discussion :

Optimisation requête sum()


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de AdriM
    Inscrit en
    Mars 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 70
    Par défaut Optimisation requête sum()
    Bonjour,

    Je cherche à optimiser une requête SQL.

    Voici ma requete de départ:

    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 t0.matricule matriculecpt, t2.nombreretours
          FROM (SELECT matricule, ID
                  FROM meterinfo) t0,
               (SELECT backflowcount, ID
                  FROM metermodule) mm,
               (SELECT measurepointinfo, meterinfo, metermodule
                  FROM pointdemesure
                 WHERE fin IS NULL) t1,
               (SELECT   SUM (data_value) nombreretours, ID
                    FROM instantdecimalserie_data
                   WHERE (data_datetime >= '01/10/08') AND (data_datetime < '15/10/08')
                GROUP BY ID) t2
         WHERE (t0.ID = t1.meterinfo)
           AND (mm.backflowcount = t2.ID)
           AND (t2.nombreretours > 0)
           AND (mm.ID = t1.metermodule)
    c'est le SUM qui semble poser problème, car la table 'instantdecimalserie_data' est très grande 1 milliards de lignes environ.

    Ma solution

    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
    17
    18
    19
        SELECT t0.matricule matriculecpt, t2.nombreretours
        FROM (SELECT matricule, ID
        FROM meterinfo) t0,
        (SELECT backflowcount, ID
        FROM metermodule) mm,
        (SELECT meterinfo, metermodule
        FROM pointdemesure
        WHERE fin IS NULL) t1,
        (SELECT  SUM (data_value) nombreretours, ID
        FROM instantdecimalserie_data
        INNER JOIN (SELECT backflowcount
        FROM metermodule) mm
        ON mm.backflowcount = ID
        WHERE (data_datetime >= '01/10/08') AND (data_datetime < '15/10/08')
        GROUP BY ID) t2
        WHERE (t0.ID = t1.meterinfo)
        AND (mm.backflowcount = t2.ID)
        AND (t2.nombreretours > 0)
        AND (mm.ID = t1.metermodule)
    un gain d'environ 30%.
    Qui dis mieux?

  2. #2
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Citation Envoyé par Adrim
    Qui dis mieux?
    Sans version, sans plan d'exécution, pas moi

  3. #3
    Scorpi0
    Invité(e)
    Par défaut
    Salut,

    Elle piques les yeux ta requête, tu ne laisses pas Oracle faire son travail d'optimisation, c'est pas glop.

    Essaye plutôt une requête plus global ou le moteur Oracle pourra bosser tranquille, genre ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT t0.matricule matriculecpt, SUM (t2.data_value) nombreretours
    FROM meterinfo t0 inner join pointdemesure t1
                      on t0.ID = t1.meterinfo
                         inner join metermodule mm
                         on mm.ID = t1.metermodule
                            inner join instantdecimalserie_data t2
                            on mm.backflowcount = t2.ID
    WHERE t2.nombreretours > 0
    and t1.fin IS NULL
    and t2.data_datetime >= '01/10/08'
    AND t2.data_datetime < '15/10/08'
    group by t0.matricule
    Mon group by est surement pas ce que tu veux, mais c'est pour te donner une idée.

  4. #4
    Membre confirmé Avatar de AdriM
    Inscrit en
    Mars 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 70
    Par défaut
    Peut etre... mais je veux mettre une condition à mon SUM (WHERE t2.nombreretours > 0)

    Ca m'oblige à faire une sous-requete pour m'occuper du cas du SUM. non?

  5. #5
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Non tu as la clause having pour cela.

  6. #6
    Membre confirmé Avatar de AdriM
    Inscrit en
    Mars 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 70
    Par défaut
    Merci, je pense avoir tous les éléments aue je voulais


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

Discussions similaires

  1. optimisation requête-regroupement info
    Par mariobedard dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/09/2005, 15h10
  2. Besoin d'aide pour optimiser requête SQL
    Par Keuf95 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 06/09/2005, 16h02
  3. Optimiser requête utilisant NOT IN
    Par Neilos dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/08/2005, 14h24
  4. optimisation requête
    Par alex2205 dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 09/02/2005, 14h15
  5. optimisation requête SQL!!! help!!
    Par anathem62 dans le forum Requêtes
    Réponses: 2
    Dernier message: 24/05/2004, 16h26

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