Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/07/2007, 09h03   #1
Membre actif
 
Inscription : novembre 2004
Messages : 311
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 311
Points : 157
Points : 157
Par défaut Oracle 8 : INSERT SELECT avec NOT IN trop long

Bonjour,

J'ai une requête qui prend un peu de temps :

Code :
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
INSERT 
     INTO  tbl_marche_ase
   SELECT  COLECT, 
   	   UAGTHEM, 
   	   ANBU1, 
   	   NUBU1, 
   	   NNM1, 
   	   PERIODE1, 
   	   PART1, 
   	   SUBSTR(NNM1,3,2),
   	   FOUR, 
   	   UAU, 
   	   MTMINI, 
   	   MTMAXI, 
   	   MTINIT, 
   	   MTAVE, 
   	   MTVARI, 
   	   TOT, 
   	   MTPART, 
   	   CREAL, 
   	   MT, 
   	   CLIQ, 
   	   CMAN, 
   	   DLIQ, 
   	   RESENG, 
   	   DLRE, 
   	   DATMAN, 
   	   NMAND, 
   	   MANDARC, 
   	   OBJET, 
   	   LIEU, 
   	   OBS, 
   	   TYPMAR, 
   	   TYPERIOD, 
   	   VALIDITE, 
   	   NATMAR, 
   	   SECTBU, 
   	   CAO, 
   	   DATNOTI, 
   	   DATDEB, 
   	   DATEJLIM, 
   	   DATSOLDE, 
   	   DATEJ, 
   	   NUMENG, 
   	   LIGNE, 
   	   MILLESI, 
   	   DATECAO, 
   	   DATFINMA, 
   	   INTERFACE, 
   	   ARTICLE, 
   	   NNMIXTE, 
   	   TYPACHAT, 
   	   TXIM, 
   	   DLGP, 
   	   PROCDART, 
   	   NDB, 
   	   T2 	
     FROM  SAGA_MARCHE
    WHERE  COLECT = 'V'
      AND  ANBU1 = '07'
      AND  VALIDITE = 'V'
      AND  nnm1 NOT IN ( SELECT  code_marche_national
      			   FROM  marche
      			  WHERE  code_marche_national IS NOT NULL );
Le NOT IN me fait perdre bcp de temps !
Voyez-vous un auter moyen d'écrire cette requête ?
Merci.
davy.g est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 09h18   #2
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
NOT EXISTS.
Vérifiez avec l'EXPLAIN PLAN que les performances sont effectivement améliorées.
__________________
Modérateur des forums Oracle et Langage SQL
Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 09h45   #3
Membre actif
 
Inscription : novembre 2004
Messages : 311
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 311
Points : 157
Points : 157
Ca donnerait quoi la requête avec le NOT EXISTS ?

Merci.
davy.g est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 10h09   #4
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
Citation:
Envoyé par Magnus
NOT EXISTS.
Vérifiez avec l'EXPLAIN PLAN que les performances sont effectivement améliorées.
Difficile en RBO, est-ce que davy utilise le CBO et collecte ses stats?
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 10h11   #5
Membre actif
 
Inscription : novembre 2004
Messages : 311
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 311
Points : 157
Points : 157
C'est quoi RBO et CBO ?

Visiblement les stats ne sont pas exécutées sur la base ...
ET je ne peux pas contacter les DBA...
davy.g est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 11h31   #6
Membre habitué
 
Inscription : juin 2003
Messages : 107
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 107
Points : 101
Points : 101
Essayer, ca peut réduire le temps d'execution

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
INSERT 
   INTO  tbl_marche_ase
   SELECT  a.COLECT, 
                ....
      	  a.T2 	
     FROM  SAGA_MARCHE a 
     WHERE  a.COLECT = 'V'
      AND  a.ANBU1 = '07'
      AND  a.VALIDITE = 'V'
      AND NOT EXISTS   ( SELECT 1
      		     FROM  marche b
      		    WHERE  b.code_marche_national IS NOT NULL 
                                   AND b.code_marche_national=a.nnm1);
lsaid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 11h33   #7
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
remplace
Code :
1
2
3
AND  nnm1 NOT IN ( SELECT  code_marche_national
      			   FROM  marche
      			  WHERE  code_marche_national IS NOT NULL );
par
Code :
1
2
3
AND NOT EXISTS ( SELECT  1
      			   FROM  marche
      			  WHERE  code_marche_national = nnm1 );
RBO : Mode Rule
CBO : Mode Choose
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h05.


 
 
 
 
Partenaires

Hébergement Web