mysql中in和exist的区别


mysql中in和exists的区别

-- in写法
select * from A where A.id in (select bid from  B ) and A.name in (select bname from  B ) ;

-- exits写法
select * from A where  EXISTS (select 1 from  B.bid = A.id );

  • 区别1
    当B表的数据远大于A表的数据 exits的效率更高(B表大,用exits)
    当B表的数据远小于A表的数据 in的效率更高(B表小,用in)
    当B表的数据和A表的数据差不多 in/exits效率基本一致

  • 区别2
    --  如果关联的字段是多个的时候用exits效率更高,可以减少B表的查询次数,提高效率

    --例子:除了通过id,还需要name字段来进行关联

    -- 使用in来完成会查询B表多次,效率低
    select * from A where A.id in (select bid from  B ) and A.name in (select bname from  B ) ;

    -- 使用existis来完成,可以减少B表的查询次数,提高效率
    select * from A where  EXISTS (select 1 from  B.bid = A.id and B.bname = A.name )


免责声明!

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



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