Mysql的子查询实现得非常糟糕,最糟糕的一类查询是where条件中包含In()的子查询语句。
select * from cteam where pid in (select boss_id from mteam where boss_id = 123456)
缺点:Mysql会将相关的外层表压到子查询中,它认为这样可以更高效查找到数据行
根据explain的输出我们可以看到,Mysql先选择对cteam表进行全表扫描,然后根据返回的pid逐个执行子查询,如果是一个很小的表,这个查询糟糕的性能可能还不会引起注意,但是如果
外层的表是一个非常大的表,那么这个查询的性能会非常糟糕。
重新SQL语句:
select c.* from cteam c right join mteam m on c.pid = m.boss_id where m.boss_id = 123456