Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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 08/12/2010, 04h33   #1
Membre habitué
 
Homme
Développeur Web
Inscription : janvier 2008
Messages : 365
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2008
Messages : 365
Points : 140
Points : 140
Par défaut LEFT OUTER JOIN ou EXISTS ?

Bonjour,

Je voudrais savoir lequel entre LEFT OUTER JOIN et EXISTS prendrait le moins de ressource.

Ma requête permet d'afficher les articles qui n'ont pas étaient cliqué (Sous MySQL) :

Code :
1
2
3
4
5
6
7
SELECT article.CodeArticle, 
       TitreItem 
FROM article
    LEFT OUTER JOIN cliquer 
         ON Cliquer.CodeArticle = article.CodeArticle 
WHERE cliquer.CodeArticle IS NULL	 
LIMIT  10
Sur http://sqlpro.developpez.com/cours/sqlaz/sousrequetes/ ils indiquent

Citation:
En général les performances seront meilleures en utilisant une jointure que dans le cas d'une sous-requête avec [NOT] IN.
Mais sur http://sqlpro.developpez.com/cours/optimiser/#L9

Citation:
évitez les sous requêtes avec IN... ...lorsque vous pouvez utiliser EXISTS
Lequel des deux est le plus optimisé ?

Merci
Khleo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 08h55   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 974
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 974
Points : 18 216
Points : 18 216
Envoyer un message via MSN à CinePhil
Ce que je vais écrire est à confirmer par un expert du fonctionnement interne d'un SGBD mais à mon avis, le NOT EXISTS est plus performant que la jointure externe.

Avec la jointure externe, le SGBD va commencer par faire la jointure entre la totalité des deux tables puis regarder où il n'y a pas de NULL pour éliminer ces lignes.

Avec le NOT EXISTS, dès qu'une ligne de la table "article" a une correspondance avec une ligne de la table "cliquer", il passe à la ligne suivante et donc il ne fait pas la jointure complète entre les deux tables.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 21h22   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 764
Points : 17 764
Tout dépend des cardinalités, de l'indexation et de la qualité de l'optimiseur. Sachant que celui de MySQL est l'un des plus mauvais, en particulier pour les sous requêtes.... A vous de voir !

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro 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 20h40.


 
 
 
 
Partenaires

Hébergement Web