sql-server - SQL Server 内连接

标签 sql-server sql-server-2008 inner-join

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

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

最佳答案

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

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

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

关于sql-server - SQL Server 内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19230493/

相关文章:

sql-server - sql中NULL的数学运算

c# - 如何编辑 Entity 框架生成的 sql 查询?

sql-server - 查询在某些数据库中有效,但在其他数据库中无效。似乎是处理嵌套函数的查询解析问题。知道为什么吗?

Mysql多表连接特例

MYSQL左连接和内连接

sql - SSIS 将百分比转换为小数

sql-server - 如何使按查询分组更快?

c# - 在共享的 OleDbConnection/OleDbTransaction 中并行执行 ExecuteNonQuery

sql - 两列上的单个非聚集索引还是每列上的单独索引?

SQL 内连接和 Group By