zoukankan      html  css  js  c++  java
  • Oracle select in/exists/not in/not exits

    -关键字 in/exists/not in/not exits

    in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。
    一直以来认为exists比in效率高的说法是不准确的。
    如果查询的两个表大小相当,那么用in和exists差别不大。

    如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:

    例如:表A(小表),表B(大表)
    1:
    select * from A where cc in (select cc from B)
    效率低,用到了A表上cc列的索引;
    select * from A where exists(select cc from B where cc=A.cc)
    效率高,用到了B表上cc列的索引。
    相反的
    2:
    select * from B where cc in (select cc from A)
    效率高,用到了B表上cc列的索引;
    select * from B where exists(select cc from A where cc=B.cc)
    效率低,用到了A表上cc列的索引。
    not in 和not exists
    如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;
    而not extsts 的子查询依然能用到表上的索引。
    所以无论那个表大,用not exists都比not in要快。

    in 与 =的区别

    select name from student where name in ('zhang','wang','li','zhao');

    select name from student where name='zhang' or name='li' or name='wang' or name='zhao'

    的结果是相同的。
    -----------------------------------------------------------------实例
    --登陆 执行以下语句,注意执行时间
    ---小表
    er_street_code
    select distinct tt.gkdm from er_street_code tt where tt.gkdm is not null
    ---大表
    er_in_detail,er_reck_detail

    ---例1
    select * from er_reck_detail t1 where t1.gkdm in (select gg.gkdm from er_street_code gg)

    select * from er_reck_detail t1 where exists (select * from er_street_code gg where t1.gkdm=gg.gkdm)

    ---例2
    select * from er_street_code aa where aa.gkdm in (select mm.gkdm from er_reck_detail mm)

    select * from er_street_code aa where exists (select * from er_reck_detail mm where mm.gkdm=aa.gkdm)

    ---例3
    select * from er_reck_detail t1 where t1.gkdm in (select t2.gkdm from er_in_detail t2)

    select * from er_reck_detail t1 where exists (select * from er_in_detail t2 where t1.gkdm=t2.gkdm)

  • 相关阅读:
    27 Spring Cloud Feign整合Hystrix实现容错处理
    26 Spring Cloud使用Hystrix实现容错处理
    25 Spring Cloud Hystrix缓存与合并请求
    24 Spring Cloud Hystrix资源隔离策略(线程、信号量)
    23 Spring Cloud Hystrix(熔断器)介绍及使用
    22 Spring Cloud Feign的自定义配置及使用
    21 Spring Cloud使用Feign调用服务接口
    20 Spring Cloud Ribbon配置详解
    19 Spring Cloud Ribbon自定义负载均衡策略
    18 Spring Cloud Ribbon负载均衡策略介绍
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400530.html
Copyright © 2011-2022 走看看