我想知道明确说LEFT JOIN之间的速度,然后简单地加入彼此的值。所以在这里,我们有:
SELECT example.id FROM example
LEFT JOIN finals ON example.id = finals.account_id";
VS
SELECT example.id, finals.account_id
FROM example, finals
WHERE example.id = finals.account_id
我几乎可以肯定第一个更快,但我找不到建议的答案。 (我实际上甚至不确定要叫'第二个',我只称它为软连接)
答案 0 :(得分:2)
这些查询之间存在 sematic 差异。
第一个连接是一个OUTER JOIN,它包含左表中的所有行。第二个是INNER JOIN,不包括匹配失败的行。
如果你写了JOIN
而不是LEFT JOIN
,那么两个查询将是相同的,除了第一个语法是可读性和可维护性的首选。
我实际上甚至不确定将第二个称为“呼叫”,我称之为软连接。
第二种语法使用MySQL称之为“逗号运算符”的语法。它有时被称为隐式连接。它也被称为 ANSI-89加入。
答案 1 :(得分:2)
第二个是INNER JOIN
(默认值),它不是速度问题而是输出 - 内连接只会返回两个表中指定字段存在的位置。
例如,如果example
记录为#3但没有finals
记录且account_id
为3,则不会显示任何记录
即使没有匹配的LEFT JOIN
记录,example
也会列出来自finals
的记录 - 缺少的字段将设置为NULL
答案 2 :(得分:0)
第二个示例执行INNER JOIN并返回可能不同的结果。
答案 3 :(得分:0)
你无法真正比较两者的速度,因为它们会给出不同的结果。第二个查询需要在两个表上都有一个条目。第一个查询只需要在第一个表上输入一个条目。
第二个查询是使用CROSS JOIN(与mysql中的JOIN没有区别。逗号是没有ON子句的JOIN的别名)。