OVH Cloud OVH Cloud

Performance : Where vs JOIN

4 réponses
Avatar
Gislain
Bonjour,

Pour améliorer des performances des requêtes, je cherche le meilleur de
faire comprendre à l'optimiseur de requête que je suis ... pressé !!!
Donc, faut-il préférer les clauses JOIN ou WHERE

SELECT table1.column1,
table2.column2
FROM table1 INNER JOIN table2
ON table1.pk_t1_id = table1.fk_t2_id

OU

SELECT table1.column1,
table2.column2
FROM table1, table2
WHERE table1.pk_t1_id = table1.fk_t2_id

Merci d'avance.

Gislain

4 réponses

Avatar
Christian Robert
Bonjour,

Aucune différences les 2 sont vues comme des jointures par le moteur.

Par contre banissez la 2ème pour des questions de lisibilité du code SQL.

--
Cordialement

Christian Robert
Consultant - Formateur chez Winwise
MCT - MCDBA - MCSD
MCTS & MCITP SQL Server 2005


"Gislain" a écrit :

Bonjour,

Pour améliorer des performances des requêtes, je cherche le meilleur de
faire comprendre à l'optimiseur de requête que je suis ... pressé !!!
Donc, faut-il préférer les clauses JOIN ou WHERE

SELECT table1.column1,
table2.column2
FROM table1 INNER JOIN table2
ON table1.pk_t1_id = table1.fk_t2_id

OU

SELECT table1.column1,
table2.column2
FROM table1, table2
WHERE table1.pk_t1_id = table1.fk_t2_id

Merci d'avance.

Gislain





Avatar
Gislain
Bonjour et merci,

Mais n'y a t'il pas des cas (sur des requêtes plus complmexes) où le WHERE
est moins performant ?

Merci.

Gislain

"Christian Robert" (sansspam)> wrote in message
news:
Bonjour,

Aucune différences les 2 sont vues comme des jointures par le moteur.

Par contre banissez la 2ème pour des questions de lisibilité du code SQL.

--
Cordialement

Christian Robert
Consultant - Formateur chez Winwise
MCT - MCDBA - MCSD
MCTS & MCITP SQL Server 2005


"Gislain" a écrit :

Bonjour,

Pour améliorer des performances des requêtes, je cherche le meilleur de
faire comprendre à l'optimiseur de requête que je suis ... pressé !!!
Donc, faut-il préférer les clauses JOIN ou WHERE

SELECT table1.column1,
table2.column2
FROM table1 INNER JOIN table2
ON table1.pk_t1_id = table1.fk_t2_id

OU

SELECT table1.column1,
table2.column2
FROM table1, table2
WHERE table1.pk_t1_id = table1.fk_t2_id

Merci d'avance.

Gislain







Avatar
Patrice
L'origine de l'ajout du JOIN concerne je pense des ambiguïtés dans l'ordre
d'évaluation des critères présents dans le where (entre ceux relevant de la
jointure et ceux qui sont de "vrais" sélections) ce qui pouvait conduire à
des résultats différents.

Pour l'aspect performance, le mieux est sans doute de commencer par voir
concrètement le plan d'exécution choisie par SQL Server.

En plus je crois me souvenir que la syntaxe 2 est définitivement bannie dans
SQL Server 2005...

--
Patrice

"Gislain" a écrit dans le message de news:

Bonjour et merci,

Mais n'y a t'il pas des cas (sur des requêtes plus complmexes) où le WHERE
est moins performant ?

Merci.

Gislain

"Christian Robert" (sansspam)> wrote in
message news:
Bonjour,

Aucune différences les 2 sont vues comme des jointures par le moteur.

Par contre banissez la 2ème pour des questions de lisibilité du code SQL.

--
Cordialement

Christian Robert
Consultant - Formateur chez Winwise
MCT - MCDBA - MCSD
MCTS & MCITP SQL Server 2005


"Gislain" a écrit :

Bonjour,

Pour améliorer des performances des requêtes, je cherche le meilleur de
faire comprendre à l'optimiseur de requête que je suis ... pressé !!!
Donc, faut-il préférer les clauses JOIN ou WHERE

SELECT table1.column1,
table2.column2
FROM table1 INNER JOIN table2
ON table1.pk_t1_id = table1.fk_t2_id

OU

SELECT table1.column1,
table2.column2
FROM table1, table2
WHERE table1.pk_t1_id = table1.fk_t2_id

Merci d'avance.

Gislain











Avatar
SQLpro [MVP]
Gislain a écrit :
Bonjour,

Pour améliorer des performances des requêtes, je cherche le meilleur de
faire comprendre à l'optimiseur de requête que je suis ... pressé !!!
Donc, faut-il préférer les clauses JOIN ou WHERE

SELECT table1.column1,
table2.column2
FROM table1 INNER JOIN table2
ON table1.pk_t1_id = table1.fk_t2_id

OU

SELECT table1.column1,
table2.column2
FROM table1, table2
WHERE table1.pk_t1_id = table1.fk_t2_id

Merci d'avance.

Gislain





1) la réalisation du plan de calcul est plus rapide en général avec des
JOIN qu'avec des jointures noyées dans la clause WHERE
2) la syntaxe JOIN est la norme depuis 1992
3) les jointures externes dans le WHERE (*=) ne produisent pas les mêmes
résultats que dans les OUTER JOIN
4) la syntaxe des jointures externe *= n'est plus supportée dans SQL
Server 2005. Elle a commencé à être déconseillée dans l'aide en ligne de
MS SQL Server 7.

mais en ce qui concerne les plans de requêtes ils devraient être identiques

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************