我想知道加入这样的查询是否更好:
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个查询在给定结果方面是等效的。他们真的(特别是第三个)吗?
我想知道发动机是否在性能方面对待它们(换句话说,我不得不担心使用它)?
答案 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"
输出可能不同。在这种情况下,第一个查询可以显示比第二个更多的结果。