Jointure multiple - SQL/NoSQL - Programmation
Marsh Posté le 12-06-2007 à 14:43:17
Si c'est la même clef primaire double pour tes 3 tables, a priori, il y a une notion de transitivité, c'est logique d'ailleurs.
Marsh Posté le 12-06-2007 à 14:48:28
Je vous remercie.
C'est ce que je pensais, mais sans en être certain
Marsh Posté le 12-06-2007 à 19:00:05
cgo2 a écrit : Si les tables ont la même clef primaire et si T1.C1 = T2.C1 et T1.C1 = T3.C1, alors T2.C1 = T3.C1. Donc, je pense que la deuxième solution suffit. |
+1
Lors d'une oppération de jointure, un index de la table jointe (ici la PK) est utilisé pour l'ensemble des tests des valeurs des tables de référence.
Par conséquent, confronter le même champ à plusieurs variables identiques de tables différentes, ça oblige le moteur à aller lire inutilement les données de toutes les tables là où une seule suffit.
Si l'optiiseur est bon, alors il va ignorer les tests en trop, sinon ta première requête va même être plus lente.
Marsh Posté le 12-06-2007 à 19:18:36
Jeu de test :
Code :
|
Requête "Type 1" :
Code :
|
Plan d'exécution :
Requête "Type 2" :
Code :
|
Plan d'exécution :
Idem Type 1 (sous SQL Server 2005)
Requête "Type 3" (tentative d'optimisation en réutilisant la première table pour la jointure) :
Code :
|
Plan d'exécution :
Idem Type 1 (sous SQL Server 2005)
=> Les trois syntaxes sont équivalentes en terme d'exécution, sous SQL Server 2005 tout du moins.
Marsh Posté le 12-06-2007 à 14:32:12
Bonjour à tous.
J'ai une petite question de jointure.
J'ai un certain nombre de tables (a priori non connu).
Je sais qu'elles possèdent toutes la même clef primaire double.
Ce que je voudrais faire, c'est les joindre. Seulement, je ne sais pas vraiment comment je dois déclarer mes conditions de jointures.
Est ce que je dois faire un truc du genre :
ou est-ce qu'il y a une notion de transitivité et que
suffit ?
merci d'avance
Message édité par Pato el canardo le 12-06-2007 à 14:33:06