【发布时间】:2010-10-14 20:00:06
【问题描述】:
发出内部连接的效果与使用 WHERE 子句中的连接条件声明交叉连接的效果相同。我注意到我公司的很多人都使用交叉联接,而我会使用内部联接。在更改其中一些查询后,我没有注意到任何显着的性能提升,并且想知道这是否只是巧合,或者 DBMS 是否透明地优化了这些问题(在我们的例子中是 MySql)。这里有一个具体的例子供讨论:
SELECT User.*
FROM User, Address
WHERE User.addressId = Address.id;
SELECT User.*
FROM User
INNER JOIN Address ON (User.addressId = Address.id);
【问题讨论】:
-
第一个不是 ANSI SQL。我知道 Microsoft 已建议使用第二个示例的语法。 MySQL 可能会做同样的事情,因为它们是公司的。此外,第一个不是交叉连接。如果您省略 where 子句,则将是交叉连接。
-
您调用的交叉连接是一种较旧的语法。我们恐龙:) 倾向于使用它。内连接语法被认为是 SQL 92 (IIRC) 标准的一部分。从那时起,供应商已经开始支持它,大多数供应商都支持这两者。因此它不是 ANSI,因为它不在文档中。
-
@WakeUpScreaming +1 指出此处没有显示交叉连接。
标签: sql performance