MySQL优化之EXISTS解析

      研究exists 这个函数,并不感觉一辈子也用不上,有时候其实就在不经意间就需要了!

      exists 用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False
exists 指定一个子查询,检测 行 的存在。通常使用exists来做什么呢?可以使用exists来判断数据的存在与否,再进一步操作,而insert if not exists 可以用在不允许重复插入数据的地方。

通常使用情况会是两个表之间相互有关联,比如A表的某个字段是B表的某个字段,A表的某些内容会根据B表变动等。

并且和它相近的 in 函数也是有这样的作用,它们之间的区别就是 :

        in 是做外表和内表通过hash 连接,先查询子表,再查询主表,不管子查询是否有数据,都对子查询进行全部匹配。

        exists是外表做loop 循环,先主查询,再子查询,然后去子查询中匹配,如果匹配到就退出子查询返回true,将结果放到结果集。

      select * from 外表 a where  id i n(select  相关id from 内表)  in的执行类似如下:

List resultSet=[];
Array A=(select * from A);
Array B=(select id from B);

for(int i=0;i<A.length;i++) {
   for(i
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值