zoukankan      html  css  js  c++  java
  • 常用的SQL语句(三) In与Exist的区别

    In       ------ 遍历

    Exists ------- 检索到满足条件即退出

    Not Exists --------检索到不满足条件即退出

     

    本质区别:

    Exists 由于Exist属于外驱动,故会利用索引来检索数据

    In 则属于内驱动 故不能利用索引检索数据

    其中,In和Not In类似全表扫描,效率低,一般用 Exist和NotExist代替其用法。

    使用环境:

    *Exists 使用外连接查询时用到。

    *In    使用内连接查询时用到。

    e.g.:

    In 的用法:

    Select Top 10 ExpoName,ExpoClassID 
    From tb_Expo
    Where ExpoClassID in (Select Classid From tb_Expo_Class Where ParentID=0)
    

    其中,先执行 Select Classid From tb_Expo_Class Where ParentID=0

    等价于:

    Select Top 10 a.ExpoName From tb_Expo a,
    (select Classid from tb_expo_class where parentid=0) b
    Where a.ExpoClassID= b.ClassID
    

    而Exist不同:

    select top 10 ExpoName,ExpoClassID from tb_Expo e
    where Exists (select 0 from tb_expo_class where parentid=0)
    

    其执行类似于下面的sql: 

    set   serveroutput  on;
    declare
            l_count   integer;
    begin
            for tb_Expo  in (Select   ExpoName,ExpoClassID   From  tb_Expo)   loop
                    Select count(*) into l_count From tb_Expo_Class
                    where parentid = 0
    
                    if l_count != 0 then
                      dbms_output.put_line(e.ExpoName);
                    end if;
    
            end loop;
    end
    

    在查询数据量大的时候就会体现出效率来。

    当然,也不能说Exist就比In好。

    如果

    Select 0 from tb_expo_class where parentid=0

    查询出来的数据量很少的话,还是 In 效率更高些。

     

     
  • 相关阅读:
    JAVA 继承
    JAVA 封装
    windows下vi/vim编辑器的基本操作
    Emacs 快速指南
    如何批量下载bing的背景图片?
    C#制作ActiveX插件
    MQTT协议
    三年前做的代码生成器,可以做为新手学习之用,当时忘了放上源码,实在抱歉!
    nginx lua 打印 特定 header
    利用Php ssh2扩展实现svn自动提交到测试服务器
  • 原文地址:https://www.cnblogs.com/cancer_xu/p/1963619.html
Copyright © 2011-2022 走看看