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 14/12/2006, 10h59   #1
Membre actif
 
Homme Vincent
Ingénieur développement logiciels
Inscription : août 2002
Messages : 237
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Âge : 34
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 : 151
Points : 151
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)
boutss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2006, 11h48   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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.
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2006, 11h59   #3
Membre actif
 
Homme Vincent
Ingénieur développement logiciels
Inscription : août 2002
Messages : 237
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Âge : 34
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 : 151
Points : 151
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 ?
boutss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2006, 12h14   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
oui mais là on parle de NOT EXISTS et NOT IN
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2006, 12h19   #5
Rédacteur
 
Avatar de bouyao
 
Inscription : janvier 2005
Messages : 1 778
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 1 778
Points : 1 857
Points : 1 857
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
bouyao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2006, 12h25   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
ha tiens... je ne connaissais pas cette nuance
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2006, 12h36   #7
Rédacteur
 
Avatar de bouyao
 
Inscription : janvier 2005
Messages : 1 778
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 1 778
Points : 1 857
Points : 1 857
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.
bouyao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2006, 12h39   #8
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
ATTENTION de ne pas confondre la comparason IN vs EXISTS et NOT IN vs NOT EXISTS
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2006, 12h42   #9
Membre actif
 
Homme Vincent
Ingénieur développement logiciels
Inscription : août 2002
Messages : 237
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Âge : 34
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 : 151
Points : 151
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é.
boutss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2006, 12h42   #10
Rédacteur
 
Avatar de bouyao
 
Inscription : janvier 2005
Messages : 1 778
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 1 778
Points : 1 857
Points : 1 857
Une petite lécture ici : http://www.dbspecialists.com/present...semijoins.html
bouyao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2006, 12h53   #11
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h54.


 
 
 
 
Partenaires

Hébergement Web