SQL Server inner join
Comment choisir la table principale lors de la jointure de plusieurs tables à l'aide d'une jointure interne?
A) dois-je choisir la table principale en fonction de son nombre de colonnes/lignes (Par exemple grande que la table principale ou pour garder la plus grande table comme table de jointure)?
B) Si je choisis la table contenant la colonne que j'utilise dans la condition where, comme la table principale , il y aura tout avantage en termes de performance ?
Par exemple permet de dire il y a 2 tables. Table1 & Table2 . Il n'y aura aucune différence de performances entre les deux solutions étant donné 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
Vous pouvez vérifier les plans d'exécution, mais je serais très surpris s'il y avait une differnce.
Je ne pense pas que cela fera une différence.
Grâce HLGEM & Nilesh pour vos commentaires. Si je choisis une grande table comme table principale , il n'y aura aucune différence? Est-il un pouce de base de la règle de jointure interne pour le rendre efficace ?
Je ne pense pas que cela fera une différence.
Grâce HLGEM & Nilesh pour vos commentaires. Si je choisis une grande table comme table principale , il n'y aura aucune différence? Est-il un pouce de base de la règle de jointure interne pour le rendre efficace ?
OriginalL'auteur kalyanasundaram v | 2013-10-07
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de différence. SQL Server va chercher "principal" de la table et le type de jointure basée sur les statistiques de la table.
Exemple:
Le tableau 1 contient 5 lignes (et seulement l'un avec l'année 2010). Table2 contient 10000 lignes.
SQL Server génère jointure par Boucles Imbriquées avec Table1 comme entrée externe, Table2 que l'entrée interne, pour obtenir 1 courir plus de 1000 lignes. Il va certainement pas générer de 10000 cycles de plus de 1 ligne.
Vous pouvez toujours obtenir les différents plans d'exécution pour les instructions ci-dessus, mais seulement dans le cas où si SQL Server va décider de ce plan doit être trivial et va sauter dans l'optimisation de la phase (parce que les tables sont presque vides, par exemple).
OriginalL'auteur PashaPash
La table principale doit être celle que vous utilisez la plupart des colonnes, donc si vous utilisez table1 avec 4 colonnes et que vous avez besoin pour obtenir une colonne de table2.
OriginalL'auteur eanderson