博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库中IN和EXISTS的区别
阅读量:6973 次
发布时间:2019-06-27

本文共 630 字,大约阅读时间需要 2 分钟。

一个是问in exist的区别,一个是not in和not exists的区别

把这两个很普遍性的网友比较关心的问题总结回答一下。

in和exist的区别

从sql编程角度来说,in直观,exists不直观多一个select,

in可以用于各种子查询,而exists好像只用于关联子查询

从性能上来看

exists是用loop的方式,循环的次数影响大,外表要记录数少,内表就无所谓了

in用的是hash join,所以内表如果小,整个查询的范围都会很小,如果内表很大,外表如果也很大就很慢了,这时候exists才真正的会快过in的方式。

not in和not exists的区别

not in内外表都进行全表扫描,没有用到索引;

not extsts 的子查询能用到表上的索引。

所以推荐用not exists代替not in

不过如果是exists和in就要具体看情况了

有时间用具体的实例和执行计划来说明。

 

本文来自CSDN博客,转载请标明出处:

 

总结:

总结:1、 in可能被优化为 连接2、 in 在未被优化时,外表小,内表大时(要建临时表并排序 耗时) 效率低3、 exists 外表数据量大,速度肯定慢,,即使是in同样一样,而对于内表数据量多少跟索引有关。4、 in 和 exists 在外表返回的数据量很大时也是低效的。 因此,,外表(驱动表) 应该都尽可能的小。 5、 not in 不走索引的,因此不能用6、 not exists走索引的。

 

你可能感兴趣的文章
WCF开发常见问题:“There is already a listener on IP endpoint 0.0.0.0:4503”
查看>>
现在还有perlmonks网站这样的网站?!
查看>>
自动到ftp下载并替换文件内容
查看>>
生成服务器密码的shell脚本
查看>>
信号捕捉
查看>>
MariaDB三之DDL,DML的应用
查看>>
GNS3模拟ASA842
查看>>
使用PowerShell配置Hyper-v Server重复数据删除
查看>>
javascript测试
查看>>
Java线程池
查看>>
解决方案:如何让ADC产品将HTTP请求负载的更加均衡
查看>>
开始运行你的第一个Java Web 项目
查看>>
PHP学习:$_GET,$_POST,$_REQUEST和$_SERVER的一些用法,以及parse_str方法
查看>>
java下DES加密与解密
查看>>
Nagios使用SendEmail发送邮件
查看>>
Domino8.5.1和Exchange2010共用一个邮件域实现邮件收发
查看>>
截图留存
查看>>
linux PDF转换为SWF
查看>>
ASP.net 中的AJAX学习记录之四 updateProgress控件的简单用法
查看>>
怎样自动生成makefile
查看>>