Closed5
MySQLのSTRAIGHT_JOINについて

Reference

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

🔧 例:
SELECT *
FROM table1
STRAIGHT_JOIN table2
ON table1.id = table2.foreign_id;
この例では、MySQL は常に table1 を先に読み取り、次に table2 を読み取る。

なぜ使うのか?
通常はオプティマイザに任せる方がよいのですが、以下のような場合に使うと良い:
- クエリの実行計画がうまくいかず、意図しない結合順序でパフォーマンスが悪化している。
- テーブルの統計情報が正確でなく、MySQL が誤った判断をしている。
- 実行計画を調整したいデバッグ・チューニング時。

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