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 :

[Tuning] jointure externe et fonction


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 [Tuning] jointure externe et fonction
    re bonjour,
    j'ai un autre probleme de performance avec la requête suivante.
    Avec jointure classique, ça met 47ms ; avec jointure externe sur gra_dam, ça met 7 secondes.
    Mais moi j'aimerai une jointure externe
    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
     
    select 
      cdhop, 
      nuagt,
      pgpmg.INFOS_GAGT.GET_CDGRA(agt.nuagt, '01', to_date( '12/07/2006', 'dd/mm/yyyy'), agt.CDCSA, agt.dtecsa) cdgra,
      pgpmg.INFOS_GAGT.GET_DTEGRA dtegra,
      gra.lbegra
    from
    	gh.gagt agt, 
    	gh.ggra gra,
    	pgpmg.grade_dam gra_dam
    where
      cdhop='01' and  nuagt IN ('020320','020851','041587','019182') and
      pgpmg.infos_gagt.GET_DTEE ( nuagt,'01', to_date('12/07/2006','dd/mm/yyyy')) is not NULL and
      gra.cdgra = pgpmg.INFOS_GAGT.GET_CDGRA(agt.nuagt,  '01',  to_date( '12/07/2006',  'dd/mm/yyyy'),  agt.cdgra,  agt.dtegra) and
      gra_dam.oid_thop(+) = 93339 and
      gra_dam.oid_ggra(+) = gra.oid_ggra
    Ci dessous le plan d'execution avec jointure classique (47 millisecondes):
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    Operation	Object Name	Rows	Bytes	Cost	Object Node	In/Out	PStart	PStop
     
    SELECT STATEMENT Hint=RULE		  	 	 	 	      	             	 
      CONCATENATION		  	 	 	 	      	             	 
        NESTED LOOPS		  	 	 	 	      	             	 
          NESTED LOOPS		  	 	 	 	      	             	 
            TABLE ACCESS BY INDEX ROWID	GAGT	  	 	 	 	      	             	 
              INDEX UNIQUE SCAN	PKGAGT	  	 	 	 	      	             	 
            INDEX RANGE SCAN	AK0_GRADE_DAM	  	 	 	 	      	             	 
          TABLE ACCESS BY INDEX ROWID	GGRA	  	 	 	 	      	             	 
            INDEX UNIQUE SCAN	PK_GGRA	  	 	 	 	      	             	 
        NESTED LOOPS		  	 	 	 	      	             	 
          NESTED LOOPS		  	 	 	 	      	             	 
            TABLE ACCESS BY INDEX ROWID	GAGT	  	 	 	 	      	             	 
              INDEX UNIQUE SCAN	PKGAGT	  	 	 	 	      	             	 
            INDEX RANGE SCAN	AK0_GRADE_DAM	  	 	 	 	      	             	 
          TABLE ACCESS BY INDEX ROWID	GGRA	  	 	 	 	      	             	 
            INDEX UNIQUE SCAN	PK_GGRA	  	 	 	 	      	             	 
        NESTED LOOPS		  	 	 	 	      	             	 
          NESTED LOOPS		  	 	 	 	      	             	 
            TABLE ACCESS BY INDEX ROWID	GAGT	  	 	 	 	      	             	 
              INDEX UNIQUE SCAN	PKGAGT	  	 	 	 	      	             	 
            INDEX RANGE SCAN	AK0_GRADE_DAM	  	 	 	 	      	             	 
          TABLE ACCESS BY INDEX ROWID	GGRA	  	 	 	 	      	             	 
            INDEX UNIQUE SCAN	PK_GGRA	  	 	 	 	      	             	 
        NESTED LOOPS		  	 	 	 	      	             	 
          NESTED LOOPS		  	 	 	 	      	             	 
            TABLE ACCESS BY INDEX ROWID	GAGT	  	 	 	 	      	             	 
              INDEX UNIQUE SCAN	PKGAGT	  	 	 	 	      	             	 
            INDEX RANGE SCAN	AK0_GRADE_DAM	  	 	 	 	      	             	 
          TABLE ACCESS BY INDEX ROWID	GGRA	  	 	 	 	      	             	 
            INDEX UNIQUE SCAN	PK_GGRA
    Ci dessous le plan d'execution avec jointure externe (7 secondes):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Operation	Object Name	Rows	Bytes	Cost	Object Node	In/Out	PStart	PStop
     
    SELECT STATEMENT Hint=RULE		  	 	 	 	      	             	 
      NESTED LOOPS OUTER		  	 	 	 	      	             	 
        NESTED LOOPS		  	 	 	 	      	             	 
          TABLE ACCESS BY INDEX ROWID	GAGT	  	 	 	 	      	             	 
            INDEX RANGE SCAN	AK7GAGT	  	 	 	 	      	             	 
          TABLE ACCESS BY INDEX ROWID	GGRA	  	 	 	 	      	             	 
            INDEX RANGE SCAN	PKGGRA	  	 	 	 	      	             	 
        INDEX UNIQUE SCAN	AK0_GRADE_DAM

  2. #2
    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
    Bah alors les gars, vous ête secs ?
    Hier, j'ai testé la syntaxe SQL2 pour voir, et ça change tout.
    1 à 15ms pour la même requete avec jointure externe :
    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 
      cdhop, 
      nuagt,
      pgpmg.INFOS_GAGT.GET_CDGRA(agt.nuagt, '01', to_date( '12/07/2006', 'dd/mm/yyyy'), agt.CDCSA, agt.dtecsa) cdgra,
      pgpmg.INFOS_GAGT.GET_DTEGRA dtegra,
      gra.lbegra
    from
    	gh.gagt agt 
    	LEFT OUTER JOIN gh.ggra gra
    			on gra.cdgra = pgpmg.INFOS_GAGT.GET_CDGRA(agt.nuagt,  '01',  to_date( '12/07/2006',  'dd/mm/yyyy'),  agt.cdgra,  agt.dtegra)
        LEFT OUTER JOIN pgpmg.grade_dam gra_dam 
    		 	on gra_dam.oid_thop = 93339 and gra_dam.oid_ggra = gra.oid_ggra 
    where
      cdhop='01' and  nuagt IN ('020320','020851','041587','019182') and
      pgpmg.infos_gagt.GET_DTEE ( nuagt,'01', to_date('12/07/2006','dd/mm/yyyy')) is not NULL
    Et maintenant sur le plan d'execution, j'ai les coûts et le nb de lignes qui s'affichent (cool )
    plan d'execution résultant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Operation	Object Name	Rows	Bytes	Cost	Object Node	In/Out	PStart	PStop
     
    SELECT STATEMENT Hint=RULE		1  	 	6  	 	      	             	 
      NESTED LOOPS OUTER		1  	93  	6  	 	      	             	 
        NESTED LOOPS OUTER		1  	82  	6  	 	      	             	 
          INLIST ITERATOR		  	 	 	 	      	             	 
            TABLE ACCESS BY INDEX ROWID	GAGT	1  	34  	4  	 	      	             	 
              INDEX RANGE SCAN	PKGAGT	1  	 	3  	 	      	             	 
          TABLE ACCESS BY INDEX ROWID	GGRA	1  	48  	2  	 	      	             	 
            INDEX RANGE SCAN	PKGGRA	1  	 	1  	 	      	             	 
        INDEX UNIQUE SCAN	AK0_GRADE_DAM	1  	11

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    et en calculant les stats pour profiter du CBO ?

  4. #4
    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
    Si tu parles de mettre oracle en optimiseur, je voudrais bien essayer mais c'est pas moi qui décide de mettre en mode RULE, c'est mes DBAs.
    Un de ces jours peut-être...

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    dans ce cas, tu peux aussi leur demander de l'aide pour l'optim de requête... ça les occupera

    Note, que ça ne veut pas dire que tes questions ne sont pas les bienvenues

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

Discussions similaires

  1. [CR9] faire une Jointure externe
    Par coldec dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 28/06/2005, 12h10
  2. Jointure externe compliquée
    Par miniil dans le forum Langage SQL
    Réponses: 9
    Dernier message: 19/02/2004, 09h27
  3. Jointure externe qui ne fonctionne pas
    Par Guizz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/02/2004, 12h26
  4. [ jointure externe ] j'y pompe rien
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/12/2003, 17h57
  5. [Interbase] [Triggers] jointure externe
    Par AnestheziE dans le forum InterBase
    Réponses: 9
    Dernier message: 17/11/2003, 16h17

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