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