8.2.2 优化子查询,派生 table 和视图引用

MySQL 查询优化器有多种策略可用于评估子查询:

  • 对于IN(或=ANY)子查询,优化器具有以下选择:

  • Semijoin

    • Materialization

    • EXISTS策略

  • 对于NOT IN(或<>ALL)子查询,优化器具有以下选择:

  • Materialization

    • EXISTS策略

对于派生 table,优化器具有以下选择(这也适用于视图引用):

  • 将派生 table 合并到外部查询块中

  • 将派生 table 具体化为内部临时 table

以下讨论提供了有关前面的优化策略的更多信息。

Note

使用子查询修改单个 table 的UPDATEDELETE语句的局限性在于,优化器不使用半联接或物化子查询优化。解决方法是,尝试将它们重写为使用联接而不是子查询的多 tableUPDATEDELETE语句。