假设我在 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 文档,但我还没有找到任何东西。