【发布时间】:2023-04-09 03:52:02
【问题描述】:
我想知道性能上的区别
select * from A,B,C where A.x = B.y and B.y = C.z
和
select * from A INNER JOIN B on A.x = B.y INNER JOIN C on B.y = C.z
基本上我想知道内连接是否比笛卡尔积表现更好? 另外,inner join 是在内部进行笛卡尔积吗?
【问题讨论】:
-
感谢大家分享可用的线程。我不知道我怎么没找到。所以基本上两者在性能方面都是相同的,但是 INNER JOIN 是更清晰的表示。
-
请注意:这些都不是笛卡尔积(也称为交叉连接)。笛卡尔积是没有连接条件的连接,如
select * from A,B或select * from A inner join B。其结果是具有 cardinality(A) * cardinality(B) 行的集合。 -
@IanBjorhovde 我提到了笛卡尔积,因为条件仅适用于笛卡尔积之后。使用内部连接,我不确定情况是否相似。
-
查询是用第一种形式还是第二种形式都没有关系,笛卡尔积也不是。 DB2 优化器永远不会执行笛卡尔积然后过滤结果以满足条件。我敢猜测,这几乎适用于任何能够执行连接的 DBMS。