初识SQL中in和exists关键字

本文对比分析了SQL查询中in与exists两种关键字的使用场景及效率。in适用于A表数据量大而B表数据量小的情况;exists则适用于相反的情况。通过对两个查询语句的具体分析,说明了不同情况下选择合适的关键字对于提升查询效率的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在SQL查询中如何使用in和exists

接触sql已经很久了,三大sql产品(sqlServer,mysql,oracle)也都用过,平时使用过程中最常用到的是oracle,但以前总是将条件查询in和exists相混淆,随意使用。在小规模数据和场景下可能影响不大,但在大表中,选择正确的关键字对查询语句的效率有极大的影响。

设A,B为数据
A的数据规模为1000W行
B的数据规模为1000行

#sql1
select a.id from A a 
where a.id in (
        select b.id from B
    )

#sql2
select a.id from A a 
where exists(
select b.id from B b,A a where a.id = b.id 
)

对sql1和sql2进行效率分析:

  1. sql1中的select b.id from B将只执行一次,子查询的结果将被缓存至子集rs1中,select a.id from A a查询的结果将循环比对rs1中的记录,如存在则将记录加入到最终的结果集rs中,所以select b.id from B查询一次,条件遍历1000W*1000次
  2. sql2中select b.id from B b,A a where a.id = b.id 将执行1000W次,每次执行不缓存结果集,因为每次子查询的where条件不一样,exists不关心结果集的内容,只关注是否存在结果

使用建议:

  • 关键字in用于A数据规模较大,B表数据规模较小的情况
  • 关键字exists用于A表数据规模较小,B表数据规模较大的情况
  • 当A、B表的数据规模相当时,两者的区别不大
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值