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 :

Oracle 8 : INSERT SELECT avec NOT IN trop long


Sujet :

Oracle

  1. #1
    Membre actif
    Inscrit en
    Novembre 2004
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 312
    Points : 202
    Points
    202
    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 : 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
    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.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    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

  3. #3
    Membre actif
    Inscrit en
    Novembre 2004
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 312
    Points : 202
    Points
    202
    Par défaut
    Ca donnerait quoi la requête avec le NOT EXISTS ?

    Merci.

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    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?

  5. #5
    Membre actif
    Inscrit en
    Novembre 2004
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 312
    Points : 202
    Points
    202
    Par défaut
    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...

  6. #6
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 107
    Points : 126
    Points
    126
    Par défaut
    Essayer, ca peut réduire le temps d'execution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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);

  7. #7
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    AND  nnm1 NOT IN ( SELECT  code_marche_national
          			   FROM  marche
          			  WHERE  code_marche_national IS NOT NULL );
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

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

Discussions similaires

  1. [MySQL] insert select avec valeur par défautl
    Par omelhor dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/07/2012, 18h26
  2. requete de select avec un count trop longue
    Par Phiss dans le forum ASP
    Réponses: 8
    Dernier message: 21/05/2008, 19h44
  3. Insert select avec BD distante
    Par romuald07 dans le forum Requêtes
    Réponses: 5
    Dernier message: 22/11/2006, 11h10
  4. [Oracle 10g]INSERT SELECT lent
    Par Giill dans le forum Oracle
    Réponses: 2
    Dernier message: 22/05/2006, 17h18
  5. [insert][select] Subqueries not allowed
    Par Invité dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/09/2005, 11h56

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