Oracle并非所有的IN都要换成EXISTS

Oracle查询优化中使用EXISTS可以比使用IN更加速度,当然这只能是在只有一个IN 的情况下,一般有多个IN的情况下,不能将所有的IN都换成EXISTS,道理我也不清楚,我只是根据实际情况的出来的结论。

采用EXISTS+IN的模式:

SELECT *
  FROM EXP_REPORT_HEADERS ERH
 WHERE EXISTS
 (SELECT 1
          FROM EXP_REPORT_LINES ERL
         WHERE ERL.EXP_REPORT_HEADER_ID = ERH.EXP_REPORT_HEADER_ID
           AND ERL.CREATION_DATE >= TO_DATE(‘2014-01-01‘, ‘yyyy-mm-dd‘))
      /*  AND EXISTS (SELECT 1
       FROM FND_COMPANIES FC
      WHERE FC.SET_OF_BOOKS_ID = 33
        AND ERH.COMPANY_ID = FC.COMPANY_ID)*/
   AND ERH.COMPANY_ID IN (SELECT FC.COMPANY_ID
                            FROM FND_COMPANIES FC
                           WHERE FC.SET_OF_BOOKS_ID = 33)

耗时:0:01

  

采用EXISTS+EXISTS

SELECT *
  FROM EXP_REPORT_HEADERS ERH
 WHERE EXISTS
 (SELECT 1
          FROM EXP_REPORT_LINES ERL
         WHERE ERL.EXP_REPORT_HEADER_ID = ERH.EXP_REPORT_HEADER_ID
           AND ERL.CREATION_DATE >= TO_DATE(‘2014-01-01‘, ‘yyyy-mm-dd‘))
        AND EXISTS (SELECT 1
       FROM FND_COMPANIES FC
      WHERE FC.SET_OF_BOOKS_ID = 33
        AND ERH.COMPANY_ID = FC.COMPANY_ID)/*
   AND ERH.COMPANY_ID IN (SELECT FC.COMPANY_ID
                            FROM FND_COMPANIES FC
                           WHERE FC.SET_OF_BOOKS_ID = 33)
*/

耗时:0:11

Oracle并非所有的IN都要换成EXISTS

时间: 2024-08-29 20:34:12

Oracle并非所有的IN都要换成EXISTS的相关文章

oracle 的 sqldeveloper换成英文界面

在软件D:\sqldeveloper\ide\bin目录下找到ide.conf添加 AddVMOption -Duser.language=en AddVMOption -Duser.country=US oracle 的 sqldeveloper换成英文界面,布布扣,bubuko.com

oracle 给表字段把VARCHAR2 换成 CLOB

select * from TableName -- 添加一个字段 alter table TableName add 字段2 clob; --复制数据到此字段update TableName set 字段2 = to_clob(字段); --给字段改名 alter table TableName rename column 字段 to 字段3;alter table TableName rename column 字段2 to 字段; -- 加注释comment on column Table

终于忍不了xfce的界面,换成kde吧,超极酷!相信每个人都会爱上它的!

开始之前先BB一段无关紧要的缘由. 之前因为自己的笔记本和实验室的台式电脑配置都奇差,所以装的都是xfce,资源占用比较小嘛(就这样都经常卡)... 如今鸟枪换成机关枪,新电脑是G3258的CPU,低端之王吧,用来跑Linux和写程序,顺便日常上网看电影使用还是够的.主要看中了它功率低,还能超频,又是奔腾20周年纪念款,算是值得吧. 昨天给新电脑装完系统,还是用的xfce+lightdm的组合,本想奢侈一把,装个cairo-dock,比xfce自带的panel要好看那么一丢丢.结果发现cairo

云计算之路-阿里云上:负载均衡从七层换成四层后的意外发现

阿里云的负载均衡产品叫SLB,七层负载均衡用的是LVS+Tengine,四层负载均衡用的是LVS. 昨天七层SLB出现了波动,我们后来改用了四层SLB. 使用后意外地发现,用户请求的响应内容TCP出包走的是云服务器的公网网卡. 之前用七层SLB时流量走的都是内网网卡,再加上RDS.Memcached也走的是内网网卡,于是网络负载都集中在一块内网网卡,内网网卡IO成为了瓶颈.而公网网卡却闲置着,我们之前也曾想过要是将一部分网络负载让公网网卡分担该多好啊. 我们用物理服务器的时候,会把Web服务器上

如何将px换成em,px与em区别是什么?

字体单位应该用em而不用px,原因简单来说就是支持IE6下的字体缩放,在页面中按ctrl+滚轮,字体以px为单位的网站没有反应.px是绝对单位,不支持IE的缩放,em是相对单位. 我在调整本blog的时候,发现不仅仅是字体,将行距(line-height),和纵向高度的单位都用em.保证缩放时候的整体性. 怎么将px换成em呢?特地转jorux06年12月的一篇文章,因为中文站用px的太多了,如果你是对代码不敏感的纯设计师,可以向技术人员或者页面制作人员请教: em是何物? em指字体高,任意浏

转:js小技巧 ,将彻底屏蔽鼠标右键,可用于Table ,取消选取、防止复制,IE地址栏前换成自己的图标

1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键<table border oncontextmenu=return(false)><td>no</table> 可用于Table 2. <body onselectstart="return false"> 取消选取.防止复制 3. onpaste="return false" 不

android 先10位匹配,若是无法匹配,则换成7位匹配

若是一些海外需求,对于号码匹配位数,需要先10位匹配,若是无法匹配,则换成7位匹配 具体情况举例: Case 1: 如果您保存的有:A:04165191666, B:5191666,  来电号码是:04165191666 因为是7位匹配,所以A和B都可以匹配到,但是最佳匹配还是A,最后显示A: 来电5191666则匹配到B. Case 2: 仅保存 A:04165191666, 来电5191666或者04165191666则都匹配A. Case 3: 仅保存 B:5191666, 来电51916

foreach 、 for 换成 ForEach

List<tBaseRolerMapPower> list =new  List<tBaseRolerMapPower>() string strName = string.Empty;  foreach (tBaseRolerMapPower item in list)  {      strName += item.power_name + ",";  } 换成: list.ForEach(p =>                    {      

当把12306验证码换成LED显示屏

年关将至,大部分伙伴们已经抢购到了一张回家的火车票.But,在这个寒冷的冬天有一种神物已经达到了人神共愤的地步,那就是咱们不得 不说的12306坑爹验证码!当验证码还是简单数字的时候小编还是很乐于帮助小伙伴们抢票的,但是,直到它们的出现我才明白不是所有的忙都是你想帮就能帮的! 尤其在见过它的升级版之后,我只能大呼:Kill me! 在全民吐槽12306验证码火爆刷屏之后恶搞版也层出不穷.各种贴合自己行业版本的恶搞版本也顺势推出.“既然玩,请带上我”,LED显示屏举手高喊.当验证码换成LED显示屏