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

Oracle Discussion :

optimisation requête Oracle 10


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 30
    Points
    30
    Par défaut optimisation requête Oracle 10
    Bonjour,

    Soit une requête du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select * 
    from   Table1, Table2
    where  Table1.Cle = Table2.Cle(+)
    and    NVL(Table2.Date, Table1.Date) >= '01/01/2007'
    and    NVL(Table2.Date, Table1.Date) <  '01/02/2007'
    Table1 contient 150 000 enregistrements, Table2 est vide. La restriction sur la période fait que cette requête ne retourne que 1600 enregistrements, en 1 seconde, tout va bien.

    Maintenant, je voudrais appliquer un autre critère, du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select * 
    from   Table1, Table2
    where  Table1.Cle = Table2.Cle(+)
    and    NVL(Table2.Date, Table1.Date) >= '01/01/2007'
    and    NVL(Table2.Date, Table1.Date) <  '01/02/2007'
    and    Fonction(Table1.Champ) = 0
    Or, lorsque je le fais, la requête rame terriblement. Donc j'essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select * 
    from  ( 
           select * 
           from   Table1, Table2
           where  Table1.Cle = Table2.Cle(+)
           and    NVL(Table2.Date, Table1.Date) >= '01/01/2007'
           and    NVL(Table2.Date, Table1.Date) <  '01/02/2007'
          )
    where Fonction(Table1.Champ) = 0;
    après avoir pris soin de mettre une séquence dans la fonction, initialisée à zéro avant de lancer la requête.

    Après exécution, la séquence vaut 90 000 et quelques, ce qui explique la lenteur, mais je ne comprends pas pourquoi on passe 90 000 fois dans cette fonction !

    La question reste : comment faire pour qu'il n'exécute cette fonction que pour les 1600 enregistrements déjà sélectionnés pour la requête ?

    Je précise que si je supprime la jointure avec la table vide, le résultat de la requête reste le même (normal), mais la séquence vaut bien 1600 et la requête va vite !

    Merci pour toute explication et idée pour booster cette requête !

  2. #2
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    quel schéma....

    les indexes ne sont sûrement pas utilisés avec toutes ces fonctions en clause WHERE

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par LeoAnderson Voir le message
    les indexes ne sont sûrement pas utilisés avec toutes ces fonctions en clause WHERE
    et encore, j'ai bien simplifié la requête pour la publier !

    Mais là n'est pas la question...

  4. #4
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Si la question n'est pas d'améliorer les perfs, c'est quoi alors ?

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    faudrait peut-être faire un index sur la fonction

  6. #6
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par LeoAnderson Voir le message
    Si la question n'est pas d'améliorer les perfs, c'est quoi alors ?
    C'est celle-ci : comment se fait-il que la fonction soit exécutée 90 000 fois alors qu'elle ne devrait s'appliquer qu'à la requête qui renvoit 1600 lignes ?

    Ensuite, car je ne doute pas qu'il y ait une bonne raison, comment faire pour qu'elle ne s'applique réellement que 1600 fois ?

  7. #7
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    peut-être parce que la table à 90000 lignes non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comment faire pour qu'elle ne s'applique réellement que 1600 fois ?
    Tu codes en PL/SQL

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

Discussions similaires

  1. Optimisation requête Oracle 10 g
    Par yuhei dans le forum Débuter
    Réponses: 5
    Dernier message: 09/09/2011, 14h48
  2. Optimisation requête sql Oracle
    Par Jinkas dans le forum Langage SQL
    Réponses: 8
    Dernier message: 05/05/2010, 15h31
  3. Réponses: 0
    Dernier message: 03/07/2008, 11h32
  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