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 效率更高些。

     

     
  • 相关阅读:
    winsock编程WSAAsyncSelect模型
    winsock编程select模型
    socket编程,简单多线程服务端测试程序
    模板singleton模式的C++实现
    windows socket函数详解
    ACE_Message_Block消息数据类
    ACE Socket Wrapper Facade
    ACE_Event_Handler:事件响应入口
    ACE_Time_Value
    华为ICDcomm接口js测试
  • 原文地址:https://www.cnblogs.com/cancer_xu/p/1963619.html
Copyright © 2011-2022 走看看