2013-10-07 116 views
4

如何使用内部连接连接多个表时选择主表?SQL Server内部连接

A)我应该选择主表取决于其列数/行(例如大主要作为主表,或保持较大的表作为联接表)?

B)如果让我选择包含我在条件作为主表,会不会有任何性能优势,使用列的表?

例如可以说有2个表。表1 &表2。会不会有低于

解决方案给出了两个解决方案之间的性能差异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 

解决方案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

您可以检查执行计划,但如果有一个differnce我会感到非常惊讶。 – HLGEM

+0

我不认为这会有什么区别。 – Nilesh

+0

感谢HLGEM&Nilesh的评论。如果我选择大桌作为主桌,会有什么区别吗?是否有任何内部连接的基本拇指规则使其有效? –

回答

1

主要表应该是您正在使用从最列一个,所以如果你使用4列的table1,你需要从table2中取出一列。

2

没有区别。 SQL Server将根据表统计信息选择“主”表和联接类型。

实施例:表1 含有5行(且仅一个与2010年)。表2包含10000行。 SQL Server将生成嵌套循环与表1作为外部输入,表2作为内部输入,以获得1运行1000行以上。它绝对不会在1行上产生10000个周期。

你仍然可以得到上述声明不同的执行计划,但只有在情况下,如果SQL Server将决定该计划应该是微不足道的,并会跳过优化阶段(因为表几乎是空的,例如)。