我在SQL Server中有两个查询。
首先查询:
Select *
From Stack, Overflow
Where Stack.Id = Overflow.StackId
第二次查询:
Select *
From Stack
Inner Join Overflow On Overflow.StackId = Stack.Id
这两个查询返回相同的结果。
那么这两个查询在性能方面有什么区别?
你更喜欢哪一个?
答案 0 :(得分:3)
使用查询#2 - 它是正确的 ANSI / ISO SQL标准 JOIN
语法,优于#1。
对于一个:你的JOIN条件是它所属的地方 - 在JOIN
- 并且不会使你的WHERE
条款混乱。您的WHERE
子句应仅包含实际用于约束结果集的内容。
其次:既然你必须在JOIN上定义你的JOIN
条件,你就不太可能“忘记”它并且不太可能产生笛卡尔积。
最后:既然您定义了INNER JOIN
或LEFT OUTER JOIN
,那么您的查询就会变得更易读和更容易 - 对于查看您查询的其他人来说,以及在您必须离开的六个月内为您自己返回并维护您的代码。
答案 1 :(得分:2)
区别在于第一个查询隐式连接两个表,其中第二个显式连接两个表。
我更喜欢第二个,只是因为你明确指出两个表是如何连接在一起的,所以 verbose 是明确的。我想你也是第一个,但随着查询的增长,阅读起来会更加困难。
性能主要取决于您的表索引。