3

CASE...WHEN...THEN のサブクエリを含むクエリがあるとします (私が取り組んでいる実際のクエリは目に負担がかかるため、単純化されています)。

SELECT
  CASE 
    WHEN (subquery1) = 1
      THEN (subquery2)
    WHEN (subquery1) > 1 AND (subquery3) = 1
      THEN (subquery4)
  END
FROM foo

4 つのサブクエリはすべて依存サブクエリです。

4 つのサブクエリはすべて実行されますか? EXPLAIN を実行すると、すべてのサブクエリがプランに含まれます。

それとも、subquery1 だけを先に実行し、その条件が満たされた場合、subquery2 が実行されますか? そうでない場合は、条件が満たされているかどうかを調べるために subquery3 が実行されます。このように、関連するサブクエリのみを実行するストアド プロシージャとしてクエリを書き直したところ、パフォーマンスが向上しました (時間の短縮)。 )。以前の条件が満たされているかどうかに関係なく、すべてのサブクエリを実行するため、元のクエリがより多くの時間を要していたかどうかを知りたいです。

一般ログをオンにしようとしましたが、サブクエリは個別にログに記録されません。それらはクエリ全体としてまとめてログに記録されるため、どのサブクエリが実際に実行されたかはわかりません。SUBQUERY の MySQL ドキュメントも調べてみましたが、まだ何も見つかりませんでした。

4

2 に答える 2