将内部联接放在左/右联接之前是否有性能差异?MySQL
我倾向于将将内部联接放在左/右联接之前是否有性能差异?MySQL,mysql,Mysql,我倾向于将内部联接放在我的任何左/右联接之前。我不确定这是否真的有速度差 这也会: 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.
内部联接
放在我的任何左/右联接
之前。我不确定这是否真的有速度差
这也会:
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
我试着用谷歌搜索差异,但找不到。在我看来,内部连接过滤掉行,然后左连接必须经过几行。由于SQL的解析和解释方式不同,所以没有区别。mysql优化器查看您的代码、索引等,不仅决定首先做什么,还决定要使用哪些键(如果有的话)。这是一个复杂的过程,虽然您可以尝试影响它,但您的装备肯定不如代码好;D 因此得出结论:不,没关系 查看优化器部分 特别是 连接表的固定顺序和每个表对应的表访问方法的组合称为查询执行计划(QEP)。查询优化器的目标是在所有这些可能的计划中找到一个最优的QEP
您可以通过在查询前面添加
EXPLAIN
来检查这一点,并查看数据库执行的执行计划。是否有,缺少?@frlan where?我看不出来。你可以编辑它,无论。。。他错了。是我的错。谢谢你的详细回答。我查看这些链接。所以我想我会追求一致性,因为在我的代码中,我把内部连接放在任何左/右连接之前,并且会继续这样做。这是一个很好的策略。我试图确保查询“读取”正确,因此真实世界中的等价项听起来不错。大多数情况下,这意味着“可选”数据(也称为左连接)实际上是最后一个。做任何适合你的事,但记住解释。它是工具箱中用于检查速度和索引是否/如何使用的重要工具。