TABLE1 T1,TABLE2 T2 WHERE T1.Blah = T2.Blah - VS - INNER JOIN

Jos*_*hua 0 sql t-sql sql-server

如果表可以基本上是内连接的,因为where子句排除了所有不匹配的记录,所以使用以下2个查询语句语法样式中的第一个确切地说有多糟糕:

SELECT {COLUMN LIST}
FROM TABLE1 t1, TABLE2 t2, TABLE3 t3, TABLE4 t4 (etc)
WHERE t1.uid = t2.foreignid
AND t2.uid = t3.foreignid
AND t3.uid = t4.foreignid
etc
Run Code Online (Sandbox Code Playgroud)

代替

SELECT {COLUMN LIST}
FROM TABLE1 t1
INNER JOIN TABLE2 t2 ON t1.uid = t2.foreignid
INNER JOIN TABLE3 t3 ON t2.uid = t3.foreignid
INNER JOIN TABLE4 t4 ON t3.uid = t4.foreignid
Run Code Online (Sandbox Code Playgroud)

我不确定这是否仅限于微软SQL,甚至是特定版本,但我的理解是第一个场景执行完全外部联接以使所有可能的相关性都可访问.

我过去使用过第一种方法来优化查询,这些查询可以访问两个非常大的数据存储区,每个存储区都有外围表连接到它们,这些连接的产品在查询的后期汇集在一起​​.通过允许每个"较大"表连接到它们各自的查找表,并且只组合每个较大表的特定子集,我发现在特定过滤之前将大表引入彼此有显着的速度改进.

在正常(简单连接)情况下,使用第二种情况会不会更好?我发现它更容易阅读,看起来它会更快.