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 d'une requête SQL


Sujet :

SQL Oracle

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 200
    Points : 66
    Points
    66
    Par défaut Optimisation d'une requête SQL
    Bonjour,

    j'ai une requête qui met un petit plus d'une heure pour s'exécuter, et je souhaiterais l'optimiser.
    Pouvez-vous me dire si vous voyez des pistes d'amélioration ?

    Voici ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        select /*+ parallel(mesure,5) */
        ma_table2.*,
        MAX (NVL (ma_table1.canal, -1)) OVER (PARTITION BY ma_table1.idr , ma_table2.date) maxcanal
      FROM (TMP tmp
      LEFT OUTER JOIN ma_table1 ON (ma_table1.idr = tmp.nom  AND ma_table1.type = 'TYP')
      LEFT OUTER JOIN ma_table2 ON (ma_table1.id = ma_table2.id 
                                                AND ma_table2.date  >= GREATEST (tmp.datedebut, ma_table1.datedebut)
                                                AND datepoint  < LEAST (tmp.datefin + 1, ma_table1.datefin + 1) );
    Les volumétries de mes 3 tables sont :
    - pour TMP : 5 000 enregistrements.
    - pour ma_table1 : 150 000 enregistrements.
    - pour ma_table2 : 4 500 000 000 enregistrements.

    J'ai identifié 2 axes d'amélioration qui sont coûteux :
    - les LEFT OUTER JOIN
    - l'opération d'aggrégation : MAX (NVL (ma_table1.canal, -1)) OVER (PARTITION BY ma_table1.idr , ma_table2.date) maxchannel.

    Mais je ne vois aucun moyen pour contourner cela.
    Avez-vous des pistes à me proposer ?

    En espérant avoir un peu d'aide à ce sujet...

    Merci,
    Berni.

  2. #2
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    1/ C'est déconseillé de mettre .* ;donc tu ne choisis que des colonnes que tu as besoin.
    2/ Le choix de jointure latérale va afficher tout le contenu de la table en question.
    3/ C'est si possible (selon le cas ) de mettre un group by.
    4/ Tu as mis les conditions de recherche dans la jointure; C'est si possible de les tester dans la clause WHERE.
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

Discussions similaires

  1. [MySQL] Optimisation d'une requête SQL
    Par PIEPLU dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 19/03/2011, 15h22
  2. Lecture et optimisation d'une requête SQL
    Par jbrasselet dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/10/2007, 15h34
  3. Optimisation d'une requête SQL
    Par Michel601 dans le forum Oracle
    Réponses: 3
    Dernier message: 08/03/2007, 15h17
  4. Optimisation d'une requête SQL
    Par gaboo_bl dans le forum Oracle
    Réponses: 18
    Dernier message: 23/10/2006, 15h33
  5. [MySQL] Optimisation d'une requête sql
    Par fabien14 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/09/2006, 11h45

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