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