【问题标题】:Subquery in SELECT statement Vs Joins [duplicate]SELECT 语句中的子查询与联接 [重复]
【发布时间】:2017-08-19 05:33:55
【问题描述】:

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

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

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

对比

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

【问题讨论】:

  • 执行计划是什么样的?

标签: sql-server sql-server-2012


【解决方案1】:

据我所知,第二个选项比第一个选项更好,因为第一个选项包含子查询。通常在 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/

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-10-18
      • 2012-10-28
      • 1970-01-01
      • 2021-05-09
      • 1970-01-01
      • 2015-08-02
      • 2011-05-09
      • 2011-11-05
      • 2013-12-19
      相关资源
      最近更新 更多