博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle select in/exists/not in/not exits
阅读量:4068 次
发布时间:2019-05-25

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

<p>in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。 <br>一直以来认为exists比in效率高的说法是不准确的。 <br>如果查询的两个表大小相当,那么用in和exists差别不大。 <br>in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。 <br>一直以来认为exists比in效率高的说法是不准确的。 <br>如果查询的两个表大小相当,那么用in和exists差别不大。 </p> <p>如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in: </p> <p>例如:表A(小表),表B(大表) <br>1: <br>select * from A where cc in (select cc from B) <br>效率低,用到了A表上cc列的索引; <br>select * from A where exists(select cc from B where cc=A.cc) <br>效率高,用到了B表上cc列的索引。 <br>相反的 <br>2: <br>select * from B where cc in (select cc from A) <br>效率高,用到了B表上cc列的索引; <br>select * from B where exists(select cc from A where cc=B.cc) <br>效率低,用到了A表上cc列的索引。 <br>not in 和not exists <br>如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引; <br>而not extsts 的子查询依然能用到表上的索引。 <br>所以无论那个表大,用not exists都比not in要快。 </p> <p>in 与 =的区别 </p> <p>select name from student where name in ('zhang','wang','li','zhao'); </p> <p>与 </p> <p>select name from student where name='zhang' or name='li' or name='wang' or name='zhao' </p> <p>的结果是相同的。 <br>-----------------------------------------------------------------实例 <br>--登陆gather/123456@pc150 执行以下语句,注意执行时间 <br>---小表 <br>er_street_code <br>select distinct tt.gkdm from er_street_code tt where tt.gkdm is not null <br>---大表 <br>er_in_detail,er_reck_detail </p> <p>---例1 <br>select * from er_reck_detail t1 where t1.gkdm in (select gg.gkdm from er_street_code gg) </p> <p>select * from er_reck_detail t1 where exists (select * from er_street_code gg where t1.gkdm=gg.gkdm) </p> <p>---例2 <br>select * from er_street_code aa where aa.gkdm in (select mm.gkdm from er_reck_detail mm) </p> <p>select * from er_street_code aa where exists (select * from er_reck_detail mm where mm.gkdm=aa.gkdm) </p> <p>---例3 <br>select * from er_reck_detail t1 where t1.gkdm in (select t2.gkdm from er_in_detail t2) </p> <p>select * from er_reck_detail t1 where exists (select * from er_in_detail t2 where t1.gkdm=t2.gkdm) <br>本篇文章来源于:开发学院 <a href="http://edu.codepub.com">http://edu.codepub.com</a> 原文链接:http://edu.codepub.com/2009/0721/10539.php</p>

转载地址:http://vcaji.baihongyu.com/

你可能感兴趣的文章
MODULE_DEVICE_TABLE的理解
查看>>
platform_device与platform_driver
查看>>
platform_driver平台驱动注册和注销过程(下)
查看>>
.net强制退出主窗口的方法——Application.Exit()方法和Environment.Exit(0)方法
查看>>
c# 如何调用win8自带的屏幕键盘(非osk.exe)
查看>>
build/envsetup.sh 简介
查看>>
C++后继有人——D语言
查看>>
Android framework中修改或者添加资源无变化或编译不通过问题详解
查看>>
linux怎么切换到root里面?
查看>>
linux串口操作及设置详解
查看>>
安装alien,DEB与RPM互换
查看>>
linux系统下怎么安装.deb文件?
查看>>
编译Android4.0源码时常见错误及解决办法
查看>>
Android 源码编译make的错误处理
查看>>
linux环境下C语言中sleep的问题
查看>>
ubuntu 12.04 安装 GMA3650驱动
查看>>
新版本的linux如何生成xorg.conf
查看>>
xorg.conf的编写
查看>>
启用SELinux时遇到的问题
查看>>
virbr0 虚拟网卡卸载方法
查看>>