工作三(exists 和 in 的效率问题)

昨天改一个需求的时候用到了子查询,我们的系统用的都是 in ,因为想到之前看到sql优化的时候要用exists代替in,效率会比较高,但是忘了这是在有索引的前提下,所以我把语句从in改成了exists,然后发现加上项目号的查询速度非常非常慢,简直到了无法忍受的地步,都直接报超时了,这时我又把exists改成了in,测试发现in的效率跟没有子查询时的效率几乎一样,嗯?不是exists比in的效率要高的吗?

事实上,存在即合理,既然有了exists还有in那就说明in在某些方面也是有优势的。

一个in子查询对应的exists子查询会把普通的子查询变成关联子查询,内查询的条件要依赖于外部的查询结果,所以exists是先查外部表,再根据外部表的数据查内部表,而in是先查内部表,然后再过滤数据。

in适合外表大,内表小的情况。

exists适用于外表小而内表大的情况。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值