SQL优化——IN和EXISTS谁的效率更高

。点击上方"蓝字"

关注我们,享更多干货!

IN和EXISTS被频繁使用在SQL中,虽然作用是一样的,但是在使用效率谁更高这点上众说纷纭。下面我们就通过一组测试来看,在不同场景下,使用哪个效率更高。

测试数据:

B表: 大表,大约300000行数据

CREATE TABLE `B` (
  `id` int NOT NULL AUTO_INCREMENT,
  `B_id` int NOT NULL,
  `value` varchar(20) NOT NULL,
  `flag` int not null,
   PRIMARY KEY (`id`),
   KEY `idx_b_flag` (`flag`),
   KEY `idx_b_id` (`B_id`)
)


A表: 小表,20000行数据

CREATE TABLE `A` (
  `id` int NOT NULL AUTO_INCREMENT,
  `flag` int NOT NULL,
  `value` varchar(20) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_a_flag` (`flag`)
)

测试1:

子查询 select flag from B where B_id<100 结果集99条。

select * from A where flag in (select flag from B where B_id<100 );
198 rows in set (0.00 sec)
select * from A where exists (select * from B where B_id<100 and A.flag=B.flag);
198 rows in set (0.10 sec)

可以看到本次测试IN效率高于EXISTS。

再看执行计划:

IN的执行计划:

(1)执行A表的查询,查询条件是A.flag在结果集B里面

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值