LEFT JOIN优化

时间:2013-09-06 09:43:30

标签: mysql database performance

我想知道加入这样的查询是否更好:

SELECT * FROM table1
    LEFT JOIN table2 ON table1.field1=table2.id
    AND table2.field2="mystring"
WHERE table2.field2="mystring"

而不是简单地这样做:

SELECT * FROM table1
    LEFT JOIN table2 ON table1.field1=table2.id
WHERE table2.field2="mystring"

MySQL引擎是否为我做了这种优化,还是明确地做它更好?

是否:

SELECT * FROM table1
    JOIN table2 ON table2.field2="mystring" AND table2.id=table1.field1

具有相同的效果,结果是否相同?

编辑:更精确一些,我的问题是:

  • 我假设上述3个查询在给定结果方面是等效的。他们真的(特别是第三个)吗?

  • 我想知道发动机是否在性能方面对待它们(换句话说,我不得不担心使用它)?

1 个答案:

答案 0 :(得分:2)

如果table2.field2!=“mystring”

,这仍会显示table1的记录
SELECT * FROM table1
    LEFT JOIN table2 ON table1.field1=table2.id
    AND table2.field2="mystring"

如果table2.field2!=“mystring”

,这将不会显示table1的记录
SELECT * FROM table1
    LEFT JOIN table2 ON table1.field1=table2.id
WHERE table2.field2="mystring"

输出可能不同。在这种情况下,第一个查询可以显示比第二个更多的结果。