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 :

Performance entre jointure externe, not exists et not in ?


Sujet :

Oracle

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 237
    Points : 185
    Points
    185
    Par défaut Performance entre jointure externe, not exists et not in ?
    Petite question subsidiaire :

    En terme de performance, en règle générale, du plus rapide au moins rapide c'est :
    1) not exists
    2) not in
    3) jointure externe

    ou la jointure externe est en 1er ?

    Si quelqu'un pourrait me fournir un lien vers la description, je l'avais déjà vu quelque part mais je ne sais plus où ?

    Merci ;o)

  2. #2
    Expert éminent sénior
    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
    Points : 19 075
    Points
    19 075
    Par défaut
    entre NOT IN et NOT EXISTS ça dépend de la cardinalité de la sous-requête... il n'y a pas de régle. Quand à la jointure externe, elle fait forcément un FTS donc a priori pas performant... sauf peut-être s'il y a une FK.

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 237
    Points : 185
    Points
    185
    Par défaut
    J'avais vu çà
    le prédicat EXISTS est en général plus rapide que le prédicat IN
    dans http://sql.developpez.com/sqlaz/sousrequetes/

    Mais bon c'est difficile, j'ai l'impression, de donner une règle fixe ?

  4. #4
    Expert éminent sénior
    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
    Points : 19 075
    Points
    19 075
    Par défaut
    oui mais là on parle de NOT EXISTS et NOT IN

  5. #5
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    Attention, des fois ca depend de la version Oracle.
    Je pense, que (en géneral)
    NOT IN est plus rapide en 8i
    NOT EXISTS est plus rapide en 9i

  6. #6
    Expert éminent sénior
    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
    Points : 19 075
    Points
    19 075
    Par défaut
    ha tiens... je ne connaissais pas cette nuance

  7. #7
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    C'est d'après mes constatations entre la 8i et la 9i.

    Normalement,
    IN vérifie si la valeur est contenu dans une liste
    EXISTS est different de IN, elle vérifie seulement l'existence des lignes ce qui est plus rapide normalement.

  8. #8
    Expert éminent sénior
    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
    Points : 19 075
    Points
    19 075
    Par défaut
    ATTENTION de ne pas confondre la comparason IN vs EXISTS et NOT IN vs NOT EXISTS

  9. #9
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 237
    Points : 185
    Points
    185
    Par défaut
    Oui car le "NOT IN" ou "NOT EXISTS" est obligé de parcourir l'ensemble à l'inverse de "IN" ou EXISTS" qui s'arrête dès qu'il a trouvé.

  10. #10
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033

  11. #11
    Expert éminent sénior
    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
    Points : 19 075
    Points
    19 075
    Par défaut
    Mouais... il manque quand même un élément extrêmement important dans la démo c'est la hash_area_size et la nuance en fonction des cardinalités

    pour info aussi : http://asktom.oracle.com/pls/ask/f?p...A:442029737684

    gare à la gestion du NULL aussi

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/12/2014, 10h28
  2. [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
  3. Réponses: 1
    Dernier message: 14/10/2008, 12h08
  4. [9i] Not in ou not exists
    Par billout9 dans le forum SQL
    Réponses: 9
    Dernier message: 30/10/2007, 09h36
  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