5

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

A)我应该根据列/行数来选择主表(例如大主表作为主表还是保持较大的表作为连接表)?

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

例如,假设有 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
4

2 回答 2

2

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

示例:Table1 包含 5 行(并且只有 2010 年的行)。表 2 包含 10000 行。SQL Server 将生成嵌套循环连接,其中 Table1 作为外部输入,Table2 作为内部输入,以获得 1 运行超过 1000 行。它绝对不会在 1 行上产生 10000 个周期。

您仍然可以获得上述语句的不同执行计划,但前提是 SQL Server 将决定该计划应该是微不足道的并且将跳过优化阶段(例如,因为表几乎是空的)。

于 2013-10-07T17:15:07.063 回答
1

主表应该是您使用最多列的表,因此如果您使用具有 4 列的 table1 并且您需要从 table2 中取出一列。

于 2013-10-07T17:03:45.343 回答