发出内连接的效果与在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);
Run Code Online (Sandbox Code Playgroud)
Jon*_*han 10
我发现允许第一种语法(逗号分隔表)的工作场所往往会占用大量时间来调试返回比预期更多行的情况.无意的交叉连接是系统的祸根,甚至可以将最精心调整的数据库带到它的膝盖上.它使我们的预制系统在去年至少两次戛然而止.
第二种语法(连接语法)强制编写者首先考虑如何将表连接在一起,然后仅返回有趣的行.使用这种语法不可能意外地进行交叉连接,因此减少了意外性能低下的查询的危险.
但是,除了这个问题之外,我从来没有注意到我所拥有的任何系统中两种语法之间存在任何速度差异.