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个查询之间是否有任何性能差异?
答案 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)
没有性能差异,但我更喜欢内部联接,因为我认为它非常清楚你试图在两个表上加入是什么。