MySQL クエリーオプティマイザには、サブクエリーの評価に使用できる様々な戦略があります:
-
IN
、= ANY
またはEXISTS
述語で使用されるサブクエリーの場合、オプティマイザには次の選択肢があります:準結合
実体化
EXISTS
戦略
-
NOT IN
、<> ALL
またはNOT EXISTS
述語で使用されるサブクエリーの場合、オプティマイザには次の選択肢があります:実体化
EXISTS
戦略
導出テーブルの場合、オプティマイザには次の選択肢があります (ビュー参照および共通テーブル式にも適用されます):
導出テーブルの外部クエリーブロックへのマージ
導出テーブルを内部一時テーブルに実体化
次の説明では、前述の最適化戦略について詳しく説明します。
サブクエリーを使用して単一のテーブルを変更する UPDATE
ステートメントおよび DELETE
ステートメントの制限は、オプティマイザが準結合サブクエリーまたは実体化サブクエリーの最適化を使用しないことです。 回避策として、サブクエリーではなく結合を使用する複数テーブルの UPDATE
ステートメントおよび DELETE
ステートメントとしてリライトしてみてください。