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 :

Variations de performance de l'opérateur IN


Sujet :

Oracle

Vue hybride

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Par défaut Variations de performance de l'opérateur IN
    Bonjour, j'ai un problème de performance d'une requete avec opérateur IN

    il semble qu'il y ai une différence entre un IN (expression_list) et un IN (subquery)

    Je m'explique, la requete suivante est très lente (500ms) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    select cdhop,
      nuagt
      from gh.gagt agt
      WHERE 
      cdhop='01' and
      nuagt IN (  
    		select nuagt from gh.gagt agt where cdhop='01' and
    		  flmed='O' and  nvl(agt.dtes1,to_date('31/12/2037','dd/mm/yyyy')) > to_date('12/07/2006','dd/mm/yyyy') and
    		    agt.CDSME = (select gcom.CDCLECOM from gh.gcom gcom, pgpmg.discipline_dam disc WHERE disc.cd_discipline='421' and
    			  gcom.oid_gcom=disc.OID_GCOM_GSME)	
    		) and
      pgpmg.infos_gagt.GET_DTEE ( nuagt,'01', to_date('12/07/2006','dd/mm/yyyy')) is not NULL
    par contre, si je remplace ma sous requete par son resultat, c'est beaucoup plus rapide (30ms)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     select cdhop,
      nuagt
    from gh.gagt agt
      WHERE 
      cdhop='01' and
      nuagt IN ( '020320','020851','041587'
      ) and
      pgpmg.infos_gagt.GET_DTEE ( nuagt,'01', to_date('12/07/2006','dd/mm/yyyy')) is not NULL
    cette liste ( '020320','020851','041587') est le résultat direct de ma sous-requete qui met 63ms à s'executer toute seule

    Vous avez une explication à ça, et (mieux encore) éventuellement une proposition pour me faire gagner des millisecondes ??

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    il est évident qu'il est plus long d'exécuter une subquery que lire une liste. Essaye avec cette version de requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select nuagt 
    from gh.gagt agt,gh.gcom gcom, pgpmg.discipline_dam disc
     where cdhop='01' 
    and flmed='O' 
    and  nvl(agt.dtes1,to_date('31/12/2037','dd/mm/yyyy')) > to_date('12/07/2006','dd/mm/yyyy') 
    and agt.CDSME = gcom.CDCLECOM
    and disc.cd_discipline='421' 
    and gcom.oid_gcom=disc.OID_GCOM_GSME

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Par défaut
    78ms, c'est beaucoup mieux !
    Effectivement, je ne sais pas pourquoi je n'ai pas fait une jointure simple.

    Merci bien !

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    la magie d'Oracle

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

Discussions similaires

  1. surcharge d'opérateurs et performances
    Par f56bre dans le forum C++
    Réponses: 8
    Dernier message: 22/10/2006, 11h53
  2. [ POSTGRESQL ] Problème de performance
    Par Djouls64 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/05/2003, 16h18
  3. [JDBC][connexion persistante] performances avec JDBC
    Par nawac dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 06/05/2003, 10h37
  4. performance entre 3DS, ase, asc ...
    Par amaury pouly dans le forum OpenGL
    Réponses: 3
    Dernier message: 24/03/2003, 11h41
  5. [imprecis]Réaliser a^n avec seulement l'opérateur d'addition
    Par Amon dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 08/11/2002, 22h22

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