• 常用的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 效率更高些。

     

     
  • 相关阅读:
    单例模式
    建造者模式
    工厂方法模式
    原型模式
    适配器模式
    桥接模式
    装饰模式
    组合模式
    多线程的学习与GDI的学习
    我们复习.Net的这些日子里
  • 原文地址:https://www.cnblogs.com/cancer_xu/p/1963619.html
Copyright © 2020-2023  润新知