mysql中in与exists效率比较

首先我们来分别用in和exists写两个相同的语句:、

in:
select * from A sno where in (select sno from B);
exists:
select * from A a where exists(select sno from B b where a.sno=b.sno);
我们先对用in写的语句进行分析,首先执行应该是执行子查询,首先将学生会的sno查询出来将返回sno缓存起来,然后通过遍历student表将所有的sno与子查询语句查询到的学生会的sno比较,若相同则选出来,而exists则是将每一个student中的sno放到子查询中和学生会中的sno进行比较。

这里我们进行假设,
当A表有100条数据,B表有10条数据时:
使用in会将B表里的10条数据先查出来,然后缓存起来。然后再将A表中的100条数据和缓存中的10条数据一一比较。
而使用where则是将A表中的100条数据,放到子查询语句中,依次比较是否相同,也就是说这时相比使用in,where多了99次进入B表查询的时间。
所以,可以得出结论当B表比A表小的时候用in的效率更高。

而当A表有10条数据,B表有100条数据时:
使用in会将B表里的100条数据先查出来,然后缓存起来。然后再将A表中的10条数据和缓存中的10条数据一一比较。
而使用where则是将A表中的10条数据,放到子查询语句中,依次比较是否相同。
这时我们使用in的时候会将100条数据进行缓存,而使用where则不用缓存。当B表大于A表时缓存的时间会大于进入B表查询的时间;所以这个时候使用where的效率更高。

综上:当A表大于B表时使用in效率更高,而B表大于A表时使用where效率更高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值