in与exists not in 与 not exists 使用场景

目录

1、案例场景介绍

2、代码实现

2.1、in 与 exists关系

3、总结

4、参考文章


1、案例场景介绍

        我们在实际开发过程之中,我们经常使用In条件来过滤记录;很多人在愁in与exist 之间的那个性能更好。但是in有个限定数量不能超过1000。

2、代码实现

2.1、in 与 exists关系

外表大,用IN;内表大,用EXISTS;

  原理:

  用in:外表使用了索引,直接作hash连接;

  用exists:内表使用了索引,外表作loop循环再进行匹配;

2.2、not in与not exists

        性能:not in不走索引,所以一般都用not exists

区别:还有一点区别就是,not in字段为null的不进行筛选出来;而使用not exists即可;

这也就是说有时定义字段,用not null比较好了,这样也能避免not in查询出错。

3、总结

        1、IN查询在内部表和外部表上都可以使用到索引;

        2、EXISTS查询仅内部表上可以使用到索引,外表会全表扫描;当子查询结果集很大,而外部表较小的时候,EXISTS的Block Nested Loop(Block 嵌套循环)的作用开始显现,查询效率会优于IN;

        3、当子查询结果集较小,而外部表很大的时候,EXISTS的Block嵌套循环优化效果不明显,IN 的外表索引优势占主要作用,此时IN的查询效率会优于EXISTS。子查询结果集越大用EXISTS,子查询结果集越小用IN

4、参考文章

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

in与exists和not in 与 not exists的区别

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值