2013-10-07 9 views
4

Comment choisir la table principale lors de la jointure de plusieurs tables à l'aide de la jointure interne? A) Dois-je choisir la table principale en fonction de son nombre de colonnes/rangées (par exemple, grand tableau principal comme table principale ou pour garder une plus grande table comme table de jointure)? B12) Si je choisis la table contenant la colonne que j'utilise dans la condition où la table principale, y aura-t-il un avantage de performance?Jointure interne SQL Server

Par exemple, disons qu'il y a 2 tables. Tableau 1 & Tableau2. Y aura-t une différence de performance entre les deux solutions ci-dessous

Solution 1:

select t1.empid , t1.name , t1.dept , t2.add , t2.city , t2.country 
from Table1 t1 
inner join Table2 t2 on t2.empid = t1.empid 
where t1.year = 2010 

Solution 2:

select t1.empid , t1.name , t1.dept , t2.add , t2.city , t2.country 
from Table2 t2 
inner join Table1 t1 on t1.empid = t2.empid 
where t1.year = 2010 
+1

Vous pouvez vérifier les plans d'exécution mais je serais très surpris s'il y avait une différence. – HLGEM

+0

Je ne pense pas que cela fera une différence. – Nilesh

+0

Merci HLGEM & Nilesh pour vos commentaires. Si je choisis une grande table comme table principale, y aura-t-il une différence? Y a-t-il une règle de base pour la jointure interne pour la rendre efficace? –

Répondre

1

Le tableau principal doit être celui que vous utilisez le plus colonnes de , donc si vous utilisez table1 avec 4 colonnes et vous avez besoin d'obtenir une colonne de table2.

2

Il n'y a pas de différence. SQL Server sélectionne la table "principale" et le type de jointure en fonction des statistiques de la table.

Exemple: Le tableau 1 contient 5 lignes (et une seule avec l'année 2010). Le tableau 2 contient 10000 lignes. SQL Server générera une jointure de boucles imbriquées avec Table1 en tant qu'entrée externe, Table2 en entrée interne, pour obtenir 1 exécution sur 1000 lignes. Il ne va certainement pas générer 10000 cycles sur 1 rangée. Vous pouvez toujours obtenir différents plans d'exécution pour les instructions ci-dessus, mais uniquement dans le cas où SQL Server décidera que ce plan doit être trivial et passera la phase d'optimisation (car les tables sont presque vides, par exemple).

Questions connexes