in子查询的SQL,正常情况执行计划会有两行两个id,来代表有两个Select查询

可是优化器在优化之后,可能会将子查询优化成连接查询,下面看看这种情况(有很多种情况我只举例这种):
先建表,这里我建好了:

执行SQL:
mysql> EXPLAIN
-> SELECT *
-> FROM user u
-> WHERE u.id IN (
-> SELECT r.user_id
-> FROM recharge r
-> WHERE r.user_id = 1
-> );
执行结果:

说明它真的被优化成了连接查询,而且是firstMatch的半连接查询匹配,也就是类似于Exists的算法存在即命中,而不是像in那种一直匹配的机制