Exist和In的取舍【 Mysql——优化思路 】

本文探讨了在数据库查询中,当面临使用IN还是EXISTS时如何选择的问题。核心观点是根据表的数据量大小来决定,小表驱动大表能提高查询效率。当A表数据量小于B表时,推荐使用EXISTS;反之,如果B表较小,则选用IN。这种优化策略有助于减少查询时间,提高数据库系统的性能。
摘要由CSDN通过智能技术生成

待查询字段是否有索引是个前提,在这个前提下,其实二者的选择与否还是要看表的大小。可以将选择的标准理解为小表驱动大表。在这种方式下效率是最高的。

比如下面这样:

 SELECT * FROM A WHERE cc IN (SELECT cc FROM B)
 SELECT * FROM A WHERE EXISTS (SELECT cc FROM B WHERE B.cc=A.cc)

其过程相当于一个【双层For循环】。当 A 的数据量小于 B 数据量 时,用 EXISTS。因为 EXISTS 的实现,相当于外表循环,实现的逻辑类似于:

 for i in A
     for j in B
         if j.cc == i.cc then ...

当 B 小于 A 时用 IN,因为实现的逻辑类似于:


 for i in B
     for j in A
         if j.cc == i.cc then ...

结论: 哪个表小就用哪个表来驱动 ,A 表小就用 EXISTS,B 表小就用 IN。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

削尖的螺丝刀

我就随便打开看看,非常佛系..

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值