Mysql 关联子查询---In

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

猜你喜欢

转载自www.cnblogs.com/Mr-Echo/p/12784633.html