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 :

Aide sur Optimisation requête


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 401
    Par défaut Aide sur Optimisation requête
    Bonjour à tous,

    je suis actuellement en train d'essayer d'optimiser une requête qui est plutôt lourde :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT AN.id_presto, BLG.id_logiciel, BLG.aan_id, TRUNC(BLG.blg_date, 'MM') as blg_date, count(*) as total
        FROM T_BRIDGELOG_BLG BLG, ANNONCE AN
        WHERE BLG.id_annonce = AN.id_annonce
          AND BLG.id_logiciel > 0
          AND TRUNC(blg_date, 'MM') in ( TRUNC(sysdate, 'MM'), TRUNC( ADD_MONTHS(SYSDATE, - 1 ) ) )
          GROUP BY id_presto, id_logiciel, aan_id, TRUNC(BLG.blg_date, 'MM')
    SELECT STATEMENT, GOAL = ALL_ROWS Cost=26541 Cardinality=12383 Bytes=1164002
    HASH GROUP BY Cost=26541 Cardinality=12383 Bytes=1164002
    NESTED LOOPS Cost=26270 Cardinality=12383 Bytes=1164002
    TABLE ACCESS FULL Object owner=PRESTO Object name=T_BRIDGELOG_BLG Cost=1490 Cardinality=12383 Bytes=619150
    TABLE ACCESS BY INDEX ROWID Object owner=PRESTO Object name=ANNONCE Cost=2 Cardinality=1 Bytes=44
    INDEX UNIQUE SCAN Object owner=PRESTO Object name=PK_ANNONCE Cost=1 Cardinality=1
    table ANNONCE environs 5 millions de lignes
    table BLG = 830 000 lignes

    Index en pk sur id_annonce
    Index sur id_presto
    Index sur trunc(blg_date)

    Le temps d'execution est d'environs 40 sec.

    1/ Comment puis-je l'optimiser ?

    2/ Comment se lit le plan d'execution, où puis-je trouver une doc là dessus ?

    Merci d'avance pour votre aide

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par shadeoner Voir le message
    ...

    2/ Comment se lit le plan d'execution, où puis-je trouver une doc là dessus ?

    Merci d'avance pour votre aide
    Using explain plan

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 401
    Par défaut
    Bonjour,

    merci pour ce lien, j'aurais préféré en français car c'est vraiment particulier et très technique.

    Sinon j'ai rien trouvé sur le "HASH GROUP BY"

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Laise tomber le HASH GROUP BY. Peux tu donner quelques détails, volumétrie, temps d’exécution constaté, description des tables des indexes, etc.

    Sinon à ce que je comprends ton plan te dit que
    • il fait un full scan de la table T_BRIDGELOG_BLG
    • pour chaque ligne il récupère id_presto de la table ANNONCE via l’index unique
    • ensuite il construit les groups


    PS. Est-ce que la condition n'est pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AND TRUNC(blg_date, 'MM') IN ( TRUNC(sysdate, 'MM'), TRUNC( ADD_MONTHS(SYSDATE, - 1 ), 'MM' ) )

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 401
    Par défaut
    Merci pour ton aide, je mets les infos dans l'en-tête.

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Malgré ton index sur trunc(blg_date, 'MM'), Oracle ne le prend pas..
    Est ce que les stats sont à jour.
    Est ce que si tu mets un = au lieu du IN (pour tester avec 1 seule date de param), oracle prend l'index ?
    Si Oui, alors tu peux surement séparer la requete en 2 (OR ou UNION ALL)

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

Discussions similaires

  1. Besoin d'aide pour optimiser requête SQL
    Par Keuf95 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 06/09/2005, 16h02
  2. Réponses: 1
    Dernier message: 03/08/2005, 11h41
  3. Besoin d'aide sur une requête (JOIN + COUNT ?)
    Par PanzerKunst dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2005, 10h29
  4. Aide sur une requête
    Par TshAw dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/02/2005, 11h42
  5. Aide sur une requête (Group By...??)
    Par Cocolapin dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/12/2004, 10h26

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