À condition que les tables puissent essentiellement être jointes, puisque la clause where exclut tous les enregistrements qui ne correspondent pas, exactement à quel point est-il mauvais d'utiliser la première des deux styles de syntaxe de l'instruction de requête suivante:TABLE1 T1, TABLE2 T2 O T T1.Blah = T2.Blah - VS - INNER JOIN
SELECT {COLUMN LIST}
FROM TABLE1 t1, TABLE2 t2, TABLE3 t3, TABLE4 t4 (etc)
WHERE t1.uid = t2.foreignid
AND t2.uid = t3.foreignid
AND t3.uid = t4.foreignid
etc
au lieu de
SELECT {COLUMN LIST}
FROM TABLE1 t1
INNER JOIN TABLE2 t2 ON t1.uid = t2.foreignid
INNER JOIN TABLE3 t3 ON t2.uid = t3.foreignid
INNER JOIN TABLE4 t4 ON t3.uid = t4.foreignid
Je ne sais pas si cela est limité à Microsoft SQL, ou même une version particulière, mais mon la compréhension est que le premier scénario fait une jointure externe complète pour rendre toutes les corrélations possibles accessibles.
J'ai utilisé la première approche dans le passé pour optimiser les requêtes qui accèdent à deux grandes banques de données auxquelles sont associées des tables périphériques, le produit de ces jointures se rejoignant tard dans la requête. En permettant à chaque table "plus grande" de se joindre à ses tables de recherche respectives, et en combinant seulement un sous-ensemble spécifique de chacune des plus grandes tables, j'ai constaté qu'il y avait des améliorations de vitesse notables sur l'introduction des grandes tables avant le filtrage spécifique .
En situation normale (jointures simples), ne serait-il pas préférable d'utiliser le deuxième scénario? Je trouve que c'est plus facile à lire et il semble que ce sera beaucoup plus rapide.
Je ne voudrais pas utiliser pour optimiser non plus, il y a des façons de faire ce que vous avez décrit en utilisant des tables dérivées par exemple ou en changeant l'ordre de jointure. – HLGEM