【问题标题】:What is the difference between these two SQL Server queries? [duplicate]这两个 SQL Server 查询有什么区别? [复制]
【发布时间】:2012-08-05 18:01:18
【问题描述】:

可能重复:
Explicit vs implicit SQL joins

我在 SQL Server 中有两个查询。

第一个查询:

Select * 
From Stack, Overflow
Where Stack.Id = Overflow.StackId

第二次查询:

Select * 
From Stack 
Inner Join Overflow On Overflow.StackId = Stack.Id

这两个查询返回相同的结果。

那么这两个查询在性能方面有什么区别?

你更喜欢哪一个?

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案1】:

    使用查询 #2 - 这是正确的 ANSI/ISO SQL 标准 JOIN 语法,并且优于 #1。

    一方面:您的 JOIN 条件是它所属的位置 - 在 JOIN 上 - 并且不会弄乱您的 WHERE 子句。您的 WHERE 子句应仅包含您实际用于约束结果集的内容。

    其次:由于您必须在 JOIN 上定义 JOIN 条件,因此您不太可能“忘记”它并无意中生成笛卡尔积。

    最后:由于您定义了 INNER JOINLEFT OUTER JOIN,您的查询变得更具可读性和更易于理解 - 对于查看您的查询的其他人,以及在六个月后您必须返回并维护您的查询的您自己代码。

    【讨论】:

      【解决方案2】:

      区别在于第一个查询是隐式连接两个表,第二个是显式连接两个表。

      我更喜欢第二个,只是因为您verbose明确地说明了两个表是如何连接在一起的。我想你也是第一个,但是随着查询的增长,它会变得更难阅读。

      性能主要取决于您的表索引。

      【讨论】:

      • 我会说 explicit,而不是 verbose
      • @RedFilter 我其实在原文中使用了explicit,但我觉得我说的太多所以我改变了它。 =)
      猜你喜欢
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 2012-04-19
      • 1970-01-01
      • 2013-10-26
      • 2020-02-02
      • 2010-12-19
      相关资源
      最近更新 更多