16

次のクエリがあるとします。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
4

3 に答える 3

23

MySQLのドキュメントには、「結合オプティマイザーは、テーブルを結合する順序を計算します」と記載されています。

この順序は、テーブルのサイズに関する情報と、インデックスの存在などのその他の要因に基づいて決定されます。

結合は、クエリの読み取りと維持に最も適した順序で配置する必要があります。

于 2013-02-20T15:47:55.747 に答える
2

私の推測では、パフォーマンスへの影響はありません。クエリ オプティマイザーは、t2 と t1 の間の結合が無効であると判断し、すべての依存関係の結合を定数値に解決する必要があります。これは、それらが評価されないことを意味します。

于 2013-02-20T15:22:17.477 に答える