我想知道显式地说LEFT JOIN和简单地连接彼此的值之间的速度。这里,我们有:
SELECT example.id FROM example
LEFT JOIN finals ON example.id = finals.account_id";
与
SELECT example.id, finals.account_id
FROM example, finals
WHERE example.id = finals.account_id
我几乎可以肯定第一种更快,但我找不到一个答案来证明这一点。(实际上我甚至不确定如何"称呼"第二个,我只是称之为软连接)
这两个查询在语义上是有区别的。
第一个连接是一个OUTER join,包括左表中的所有行。第二个是INNER JOIN,不包括匹配失败的行。
如果您编写的是JOIN
而不是LEFT JOIN
,那么这两个查询将是相同的,只是第一种语法在可读性和可维护性方面更受欢迎。
实际上我甚至不确定如何"称呼"第二个,我只是称之为软连接)
第二种语法使用MySQL所说的"逗号操作符"。它有时被称为隐式连接。它也被称为ANSI-89连接
第二个是INNER JOIN
(默认),它不是速度问题,而是输出问题-内部连接只返回指定字段在两个表中都存在的地方。
例如,如果有example
记录#3,但没有finals
记录,account_id
为3,则两个记录都不会显示
LEFT JOIN
将列出example
的记录,即使没有匹配的finals
记录-缺失的字段将设置为NULL
第二个示例执行INNER JOIN,并返回可能不同的结果。
你不能比较两者的速度,因为它们会给出不同的结果。第二个查询需要两个表上的一个条目。第一个查询只需要在第一个表上有一个条目。
第二个查询使用CROSS JOIN(与mysql中的JOIN没有区别)。