`

数据库中in与exists的区别.txt

sql 
阅读更多

对于in与exists的区别:

    in适合于外表大而内表小的情况;exists适合于外表小而内表大的情况。

    如果子查询得出的结果集记录较少,主查询的表较大且又有索引时应用in,反之如果外层的主查询记录较少,子查询中的表大,

又有索引时使用exists。

    其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键)。如果是exists,那么以外层的表为驱动表,先

被访问,如果是in,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系了。

    另外in时不对null进行处理,如:select 1 from dual where null in(0,1,2,null)返回为空。

 

对于not in和 not exists的区别:

    not in 在执行时,为了证明存在性,必须遍历整个表单,从第一个数据到最后一个;而 not exists 在执行时,只要出现第一

个数据,就不会再执行子查询。

    所以效率上,not exists比 not in高效的多。

    not in 只有当子查询中,select关键字后的字段有not null约束或者有这种暗示时用not in。另外如果主查询中表大,子查询

中表小但是记录多,则应当使用not in。如果主查询表中记录少,子查询表中记录多,并有索引,可以使用not exists,另外not in

最好用 外连接 + is null。

   尽量不要使用not in(它会调用子查询),而尽量使用not exists(它会调用关联子查询)。

如果子查询中返回的任意一条记录含有空值,则查询将不返回任何记录。    

分享到:
评论

相关推荐

    40集SQL Server 基础入门视频教程 SQL Server 数据库基础入门必备课程.txt

    5.SQL Server 2014数据库修改与删除.mp4 6.SQL Server 2014数据库备份与还原.mp4 7.SQL Server 2014数据类型.mp4 8.SQL Server 2014新建表.mp4 9.SQL Server 2014修改、删除表结构.mp4 PPT SQL Server 2014...

    mysql高级视频教程百度云(2019).txt

    47.MySQL高级_in和exists.avi 46.MySQL高级_小表驱动大表.avi 45.MySQL高级_索引优化答疑补充和总结口诀.avi 44.MySQL高级_索引面试题分析.avi 43.MySQL高级_索引优化10.avi 42.MySQL高级_索引优化9.avi ...

    ORACLE9i_优化设计与系统调整

    §12.5 使用EXISTS和IN 148 §12.6 分离事务(Discrete Transactions ) 149 §12.7 测试SQL语句性能 151 §12.7.1 SQL_Trace实用工具 151 §12.7.2 TKPROF实用程序 151 §12.8 使用SQL_Trace和TKPROF 151 §12.8.1 ...

    数据库设计和高级查询课程课件(SQL Server版)

    SQL Server数据库设计和高级查询 DLC DLC\指导学习PPT DLC\指导学习PPT\指导学习V1.0.ppt DLC\指导学习答案.sql chapter2 chapter2\上机部分 chapter2\上机部分\教学幻灯片 chapter2\上机部分\教学幻灯片\LG2V1.0....

    xls转mdb代码以及.exe执行软件

    EXEC master..xp_cmdshell 'bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword' /** 导出文本文件 EXEC master..xp_cmdshell 'bcp dbname..tablename out c:\DT.txt -c -Sservername -Usa -P...

    MYSQL常用命令大全

    8:用文本方式将数据装入数据库表中(例如D:/mysql.txt) mysql> LOAD DATA LOCAL INFILE "D:/mysql.txt" INTO TABLE MYTABLE; 9:导入.sql文件命令(例如D:/mysql.sql) mysql>use database; mysql>source d:/mysql....

    MySQL自动备份

    MYSQL自动备份脚本 功能说明:1 自动保留前三天的数据备份2 命令参数决定要备份的数据库,可以..."fi### delete txt file if exists#rm -rf ${backuppath}*.txt###################################################

    MySQL命令大全

    8:用文本方式将数据装入数据库表中(例如D:/mysql.txt) mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt”INTO TABLE MYTABLE; 9:导入.sql文件命令(例如D:/mysql.sql) mysql>use database; mysql>source d:/...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作典型应用和数据库...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    与Java和Perl不同,你不必把头埋进100多页的文档中努力学习才可以写出一个象样的程序。只要了解一些基本的语法和语言特色,你就可以开始你的PHP编码之旅了。之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅...

    oracle asm rac

    上述服务有不存在的会提示,服务中读取信息时出错:没有那个文件或目录。没问题,忽略。 停用NTP服务 /sbin/service ntpd stop chkconfig ntpd off mv /etc/ntp.conf /etc/ntp.conf.bak 重启所有节点 安装yum源...

    Linux FTP服务搭建

    确认系统中vsFTPd的安装和版本情况: [root@localhost ~]#rpm –q vsftpd 安装vsFTPd命令: [root@localhost Server]#rpm –ivh vsftpd-2.0.5-12.el5.i386.rpm 在vsftpd.conf文件中配置匿名访问: anonymous_...

    fso浏览54646465465464564

    '声明函数中所需的全局变量 Dim conn,rs,oStream,NoPackFiles,RootPath,FailFileList NoPackFiles="|<$datafile>.mdb|<$datafile>.ldb|" '------------------------------------------------------------- Call Main...

    2009达内SQL学习笔记

    保存在oracle数据库中的所有操作细节: spool oracleday01.txt :开始记录 spool off :开始保存细节 四、SELECT语句:选择操作、投影操作。 select:从一个或多个表中检索一个或多个数据列。包含信息:想选择...

    Excel VBA实用技巧大全 附书源码

    01015获取在Excel主窗口中一个窗口所能占有的最大高度和宽度 01016获取当前打印机名称 01017获取MicrosoftExcel剩余内存 01018获取MicrosoftExcel的总内存 01019获取计算机被Excel占用的内存 01020改变Excel窗口大小...

Global site tag (gtag.js) - Google Analytics