在加入时或在更好的地方添加更多条件?

时间:2011-07-28 04:05:02

标签: sql sql-server tsql

    SELECT C.* 
      FROM Content C
INNER JOIN ContentPack CP ON C.ContentPackId = CP.ContentPackId 
                         AND CP.DomainId = @DomainId

...和

    SELECT C.* 
      FROM Content C
INNER JOIN ContentPack CP ON C.ContentPackId = CP.ContentPackId
     WHERE CP.DomainId = @DomainId

这2个查询之间是否有任何性能差异?

2 个答案:

答案 0 :(得分:7)

因为两个查询都使用INNER JOIN,所以没有区别 - 它们是等价的 如果处理OUTER JOIN则不会出现这种情况 - {<1}}子句中的条件在连接之前应用;联接后,ON中的条件应用

但您的查询可能会更好地运行:

WHERE

如果有多条SELECT c.* FROM CONTENT c WHERE EXISTS (SELECT NULL FROM CONTENTPACK cp WHERE cp.contentpackid = c.contentpackid AND cp.domainid = @DomainId) 记录与CONTENTPACK记录相关,则使用JOIN会产生重复。如果你的查询没有使用来自JOIN的表中的列,那么JOIN是没有意义的...... JOIN并不总是最快的方式。

答案 1 :(得分:1)

没有性能差异,但我更喜欢内部联接,因为我认为它非常清楚你试图在两个表上加入是什么。