我倾向于始终将INNER JOINS
放在LEFT/RIGHT JOINS
之前。我不确定这是否真的有任何速度差异。
那就是这样:
SELECT *
FROM Table1
INNER JOIN Table2 ON Table1.ID = Table2.ID
LEFT JOIN Table3 ON Table3.ID = Table1.ID
执行速度更快/更慢:
SELECT *
FROM Table1
LEFT JOIN Table3 ON Table3.ID = Table1.ID
INNER JOIN Table2 ON Table1.ID = Table2.ID
我试图谷歌差异但找不到一个。在我看来,我认为INNER JOIN过滤掉行,然后LEFT join必须通过几行。
答案 0 :(得分:3)
mysql优化器查看您的代码,索引等,不仅决定先做什么,还要决定使用哪些(如果有的话)密钥。这是一个复杂的过程,虽然你可以尝试影响它,但你肯定不如代码那么好; D
总结:不,没关系。
查看优化程序部分of the manual
表连接的固定顺序和每个表的相应表访问方法的组合称为查询执行计划(QEP)。查询优化器的目标是在所有这些可能的计划中找到最佳QEP。
您可以通过在查询前添加EXPLAIN
并查看数据库执行的执行计划来自行检查。
答案 1 :(得分:0)
由于SQL的解析和插入方式没有区别。