Closed5

MySQLのSTRAIGHT_JOINについて

tamaco489tamaco489

概要

MySQL で使用される特殊な種類の JOIN 。
通常の JOIN(INNER JOIN や LEFT JOIN)では、MySQL のクエリオプティマイザが結合順序(どのテーブルを先に読み込むか)を自動的に最適化しようとするが、 STRAIGHT_JOIN を使うと、指定されたテーブルの順序で結合が強制される。

tamaco489tamaco489

🔧 例:

SELECT * 
FROM table1 
STRAIGHT_JOIN table2 
ON table1.id = table2.foreign_id;

この例では、MySQL は常に table1 を先に読み取り、次に table2 を読み取る。

tamaco489tamaco489

なぜ使うのか?

通常はオプティマイザに任せる方がよいのですが、以下のような場合に使うと良い:

  • クエリの実行計画がうまくいかず、意図しない結合順序でパフォーマンスが悪化している。
  • テーブルの統計情報が正確でなく、MySQL が誤った判断をしている。
  • 実行計画を調整したいデバッグ・チューニング時。
tamaco489tamaco489

使用上の注意点

  • 依存性が高まる:結合順序が固定されるため、将来的なデータ量や構成変更に弱くなる可能性がある。
  • 本当に必要な場合以外は使わない:通常の JOIN で十分なことが多い。※基本的な振る舞いは INNER JOIN と同義
このスクラップは4ヶ月前にクローズされました