可能重复:
显式与隐式 SQL 连接
我在 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 中有两个查询。
第一个查询:
Select *
From Stack, Overflow
Where Stack.Id = Overflow.StackId
第二个查询:
Select *
From Stack
Inner Join Overflow On Overflow.StackId = Stack.Id
这两个查询返回相同的结果。
那么这两个查询在性能方面有什么区别呢?
你更喜欢哪一个?
使用查询 #2 - 它是正确的ANSI/ISO SQL 标准 JOIN
语法,并且优于 #1。
一方面:您的 JOIN 条件是它所属的位置 - 在JOIN
- 并且不会弄乱您的WHERE
子句。您的WHERE
子句应仅包含您实际用于约束结果集的内容。
其次:由于您必须JOIN
在 JOIN 上定义您的条件,因此您不太可能“忘记”它并无意中生成笛卡尔积。
最后:由于您定义了INNER JOIN
or LEFT OUTER JOIN
,您的查询变得更具可读性和更容易理解 - 对于查看您的查询的其他人,以及在六个月后您必须返回并维护您的代码的您自己。
不同之处在于第一个查询隐式连接两个表,而第二个查询显式连接两个表。
我更喜欢第二个,只是因为您在说明两个表是如何连接在一起时非常详细。我想你也是第一个,但随着查询的增长,它会变得更难阅读。
性能主要取决于您的表索引。