Je suis en train de récupérer un programme en cours et la personne qui a
travaillé dessus a créé des vues avec des left outer join partout (de peur
sans doute de "rater" des données).
Et, dans la plupart des cas des inner join auraient été plus pertinents.
Y a-t-il de grosses différences de performances entre un left outer join qui
ne ramène qu'une ligne et un inner join ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean-Pierre Riehl
Bonjour Jérome,
Il y a en effet des différences importantes entre un OUTER JOIN et un INNER JOIN. Un OUTER JOIN va devoir scanner la totalité d'une des 2 tables (en fonction de si c'est LEFT ou RIGHT) car c'est fondamentalement ce qu'on lui demande. Pour s'en rendre compte, il suffit d'afficher le plan d'éxecution de la requête et de voir que l'on a un SCAN (index scan ou table scan) au lieu d'un SEEK. Bien évidemment, l'utilisation pertinente d'index peut rendre un OUTER JOIN aussi performant qu'un INNER JOIN. Je vous invite à bien regarder les plans d'exécution pour identifier les jointures externes couteuses. Et j'ajouterai que l'on utilise des jointures externes parce que l'on en a besoin, pas juste au cas où...
-- Jean-Pierre Riehl http://blog.djeepy1.net
"jerome" wrote in message news:
Bonjour,
Je suis en train de récupérer un programme en cours et la personne qui a travaillé dessus a créé des vues avec des left outer join partout (de peur sans doute de "rater" des données). Et, dans la plupart des cas des inner join auraient été plus pertinents.
Y a-t-il de grosses différences de performances entre un left outer join qui ne ramène qu'une ligne et un inner join ?
Merci
Bonjour Jérome,
Il y a en effet des différences importantes entre un OUTER JOIN et un INNER
JOIN. Un OUTER JOIN va devoir scanner la totalité d'une des 2 tables (en
fonction de si c'est LEFT ou RIGHT) car c'est fondamentalement ce qu'on lui
demande. Pour s'en rendre compte, il suffit d'afficher le plan d'éxecution
de la requête et de voir que l'on a un SCAN (index scan ou table scan) au
lieu d'un SEEK.
Bien évidemment, l'utilisation pertinente d'index peut rendre un OUTER JOIN
aussi performant qu'un INNER JOIN. Je vous invite à bien regarder les plans
d'exécution pour identifier les jointures externes couteuses. Et j'ajouterai
que l'on utilise des jointures externes parce que l'on en a besoin, pas
juste au cas où...
--
Jean-Pierre Riehl
http://blog.djeepy1.net
"jerome" <jerome@hh.fr> wrote in message
news:eEcfXJczHHA.1100@TK2MSFTNGP06.phx.gbl...
Bonjour,
Je suis en train de récupérer un programme en cours et la personne qui a
travaillé dessus a créé des vues avec des left outer join partout (de peur
sans doute de "rater" des données).
Et, dans la plupart des cas des inner join auraient été plus pertinents.
Y a-t-il de grosses différences de performances entre un left outer join
qui
ne ramène qu'une ligne et un inner join ?
Il y a en effet des différences importantes entre un OUTER JOIN et un INNER JOIN. Un OUTER JOIN va devoir scanner la totalité d'une des 2 tables (en fonction de si c'est LEFT ou RIGHT) car c'est fondamentalement ce qu'on lui demande. Pour s'en rendre compte, il suffit d'afficher le plan d'éxecution de la requête et de voir que l'on a un SCAN (index scan ou table scan) au lieu d'un SEEK. Bien évidemment, l'utilisation pertinente d'index peut rendre un OUTER JOIN aussi performant qu'un INNER JOIN. Je vous invite à bien regarder les plans d'exécution pour identifier les jointures externes couteuses. Et j'ajouterai que l'on utilise des jointures externes parce que l'on en a besoin, pas juste au cas où...
-- Jean-Pierre Riehl http://blog.djeepy1.net
"jerome" wrote in message news:
Bonjour,
Je suis en train de récupérer un programme en cours et la personne qui a travaillé dessus a créé des vues avec des left outer join partout (de peur sans doute de "rater" des données). Et, dans la plupart des cas des inner join auraient été plus pertinents.
Y a-t-il de grosses différences de performances entre un left outer join qui ne ramène qu'une ligne et un inner join ?