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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM