MySQL 查询优化器有多种策略可用于评估子查询:
对于使用 IN、= ANY 或 EXISTS 谓词的子查询,优化器有以下选择:
IN
= ANY
EXISTS
半连接
物化
EXISTS 策略
对于使用 NOT IN、<> ALL 或 NOT EXISTS 谓词的子查询,优化器有以下选择:
NOT IN
<> ALL
NOT EXISTS
对于派生表,优化器有以下选择(这也适用于视图引用和公共表表达式):
将派生表合并到外部查询块中
将派生表物化到内部临时表中
以下讨论将提供更多关于上述优化策略的信息。
在使用子查询修改单个表的 UPDATE 和 DELETE 语句时,优化器不使用半连接或物化子查询优化。作为解决方法,尝试将它们重写为多表 UPDATE 和 DELETE 语句,使用连接而不是子查询。
UPDATE
DELETE