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