出于性能原因,SQL JOIN是否应按特定顺序排列?

use*_*531 15 mysql optimization

假设我有以下查询.如果在加入t1和t2时没有匹配项,那么MySQL会忽略所有其他连接吗?

我问的原因是,如果没有,那么我将分解查询并使用PHP将它拼凑在一起.如果没有性能损失,那么我将按照这样的顺序放置我的JOIN,一旦前一个JOIN没有,就不会继续.谢谢

SELECT whatever
FROM t1
INNER JOIN t2 ON t2.t1id=t1.id
INNER JOIN t3 ON t3.t2id=t2.id
INNER JOIN t4 ON t4.t3id=t3.id
INNER JOIN t5 ON t5.t4id=t4.id
INNER JOIN t6 ON t6.t5id=t5.id
INNER JOIN t7 ON t7.t6id=t6.id
INNER JOIN t8 ON t8.t7id=t7.id
INNER JOIN t9 ON t9.t8id=t8.id
WHERE t1.c=123 AND t4.c=321 AND t6.c=222 AND t9.c=222
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 23

MySQL 的文档说明"连接优化器计算表应该连接的顺序".

此顺序基于有关表的大小和其他因素的信息确定,例如索引的存在.

您应该将连接放在最有意义的读取和维护查询的顺序中.

  • MySQL将进行所有连接.如果您在其他表中的id列上有索引,那么引擎将使用索引并且性能应该是非问题. (2认同)
  • 感谢您引用文档! (2认同)