2

可能重复:
显式与隐式 SQL 连接

我在 SQL Server 中有两个查询。

第一个查询:

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

第二个查询:

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

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

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

你更喜欢哪一个?

4

2 回答 2

3

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

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

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

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

于 2012-08-08T15:20:05.770 回答
2

不同之处在于第一个查询隐式连接两个表,而第二个查询显式连接两个表。

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

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

于 2012-08-08T15:15:12.877 回答