1. 物化表

将子查询结果集中的记录保存到临时表的过程,称为物化。

2. 物化表转连接

image.png

3. 子查询转为半连接

4. 半连接的适用条件

image.png

5。 不适用半连接的情况

in转换位exists子查询。

in 和 exist

当前MySQL8.0版本可以”毫无顾忌“地写子查询,对于子查询的优化已经相当完备

《MySql技术内幕:SQL编程》:书中描述的确实有很多DBA认为EXISTS比IN的执行效率更高,可能是当时优化器还不是很稳定和足够优秀,但是目前绝大数的情况下,IN和EXISTS都具有相同的执行计划。

有的说大小表的,有的说in和exists具有相同的执行计划的,可能是版本问题。
《高性能MySQL(第三版)》p224:Mysql将in操作转变为exists操作
in子查询优化 - 图3

in子查询优化 - 图4