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

SQL Oracle Discussion :

[9i] performance jointure externe , not exists et not in


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 19
    Points : 15
    Points
    15
    Par défaut [9i] performance jointure externe , not exists et not in
    Bonjour,

    J'ai lu l'article suivant :

    http://sheikyerbouti.developpez.com/...timisation.pdf

    A la page 9, l'article nous dit que le mieux en terme de performance est d'utiliser une jointure externe, NOT EXISTS et enfin NOT IN en dernier.

    Dans le forum, j'ai vu un post ou vous dites d'utiliser la jointure externe en dernier cas et de préférer NOT EXISTS.

    Pouvez vous m'expliquer les différences?

    De plus l'exemple donné dans l'article toujours dans la même page n'est pas très clair pour moi :

    -- avec not in (lent)--
    Select a.nom, a .prenom
    From Salarie a
    Where a.nom not in (select nom from Fonction where job =
    ‘INFORMATICEN’ );

    -- avec jointure externe (plus rapide)--
    Select a.nom, a.prenom
    From Salarie a, Fonction b
    Where a.nom = b.nom(+)
    And b.nom is NULL
    And b.job = ‘INFORMATICIEN’;

    pour moi c'est 2 requête ne donnent pas le même résultat

    Merci

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Avec les bons index on a très souvent (tout le temps ?) le même plan d'exécution avec un NOT EXISTS qu'avec une jointure externe.

    Il m'a semblé déceler une erreur dans la jointure externe (il aurait fallu écrire b.job(+) = 'INFORMATICIEN'), je reprends l'exemple.

    -- avec not in (lent)--
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Select a.nom, a .prenom
    From Salarie a
    Where a.nom not in (select nom from Fonction
                        where job = ‘INFORMATICEN’ )
    -- avec jointure externe (plus rapide) --
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select a.nom, a.prenom
    From
        Salarie a
        left outer join Fonction b
          on b.nom = a.nom 
         and b.job = ‘INFORMATICIEN’
    where b.nom is NULL
    -- avec un not exists --
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select a.nom, a.prenom
    from salarie a
    where not exists (select 1 from Fonction b
                      where b.nom = a.nom 
                      and b.job = ‘INFORMATICIEN’)

Discussions similaires

  1. [MySQL] Requête sur table de jointure avec not in ou not exists
    Par GueloSuperStar dans le forum Langage SQL
    Réponses: 12
    Dernier message: 08/03/2013, 15h01
  2. [9i] Not in ou not exists
    Par billout9 dans le forum SQL
    Réponses: 9
    Dernier message: 30/10/2007, 09h36
  3. EXISTS et NOT EXISTS
    Par Maljuna Kris dans le forum Requêtes
    Réponses: 3
    Dernier message: 06/09/2007, 10h16
  4. Réponses: 10
    Dernier message: 14/12/2006, 12h53
  5. Utilisation de EXISTS ou NOT EXISTS
    Par lucky31 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 31/05/2006, 16h43

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