SELECT语句中的子查询与联接

时间:2017-03-26 15:29:02

标签: sql-server sql-server-2012

我有非常大的表和现有查询,在SELECT语句中使用了长子查询。如果子查询转换为JOIN,性能是否相同?

以下查询在性能方面有何不同?

SELECT
e.employee_id,
(
  SELECT department_name
  FROM Department
  WHERE employee_id = e.employee_id) Department_Name
FROM Employee e

Vs的

SELECT
e.employee_id,
d.department_name Department_Name
FROM Employee e
JOIN Department d
ON d.employee_id = e.employee_id

2 个答案:

答案 0 :(得分:4)

据我所知,第二个选项比第一个选项更好,因为第一个选项包含子查询。通常在sql语句执行中,连接比内部(子)查询工作得更快,您可以获取SQL Server生成的执行计划的帮助。问题在于如何编写查询,SQL Server将始终根据执行计划对其进行转换。这将是为两个查询生成执行计划的明智方法,绝对可以获得性能结果。

有关详情,请访问以下链接。

  1. https://blog.sqlauthority.com/2010/06/06/sql-server-subquery-or-join-various-options-sql-server-engine-knows-the-best/

  2. http://www.sqlservice.se/sql-server-performance-death-by-correlated-subqueries/

答案 1 :(得分:0)

在大多数情况下,具有索引连接列的表JOIN将提供比子查询更好的性能。通过选择两个查询(子查询和联接)来检查估计的执行计划,您可以看到SSMS的差异。