Mysql 关联子查询---In

Mysql的子查询实现得非常糟糕,最糟糕的一类查询是where条件中包含In()的子查询语句。

select * from cteam where pid in (select boss_id from mteam where boss_id = 123456)

缺点:Mysql会将相关的外层表压到子查询中,它认为这样可以更高效查找到数据行

Mysql 关联子查询---In

根据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

Mysql 关联子查询---In

 

Mysql 关联子查询---In

上一篇:MSSQL case when


下一篇:CentOS 7 静默安装 Oracle 11g 11.2.0.2 数据库系统(一)