六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

子查詢中的IN與EXISTS的區別

[摘要]在復雜的查詢中,選擇正確的子句將會對性能產生很大的影響。考慮一下在你的編碼中使用過哪一些子句。 在主要/明細關系表中寫一個SQL的時候,多數人都會經歷這么一步,那就是決定是使用WHERE EXISTS(…)子句還是WHERE值IN(…)子句來編寫查詢語句。你可能會拒絕使用WHERE EXI...

    在復雜的查詢中,選擇正確的子句將會對性能產生很大的影響。考慮一下在你的編碼中使用過哪一些子句。

     在主要/明細關系表中寫一個SQL的時候,多數人都會經歷這么一步,那就是決定是使用WHERE EXISTS(…)子句還是WHERE值IN(…)子句來編寫查詢語句。你可能會拒絕使用WHERE EXISTS,因為用它來編寫的話,要返回一個值,在語法上很困難,而這正是你經常忽視的。

     可是,如果你使用基于規則的最優化的話,情況就會大不相同了。你可以通過了解哪個表是驅動表,以及每一部份會返回多少行,來確定一個基于規則的查詢的性能。

    當你用IN子句來寫一個查詢語句的時候,就等于你向該基于規則的最優化傳達了這樣一個信息,即你想讓內部的查詢推動外部的查詢(假定:IN=由里而外)。舉例來說,為在一個有14行記錄的EMP表中查詢員工名稱等于“KING”的所有記錄到一個直接報表中,你可以這樣寫:

    select ename from emp e

        where mgr in (select empno from emp where ename = 'KING');

    以下是關于這個查詢的說明計劃:

    OBJECT     OPERATION

    ---------- ----------------------------------------

                 SELECT STATEMENT()

                  NESTED LOOPS()

    EMP                TABLE ACCESS(FULL)

    EMP                 TABLE ACCESS(BY INDEX ROWID)

    PK_EMP               INDEX(UNIQUE SCAN)

    這個查詢實際上等同于以下這個:

    select e1.ename from emp e1,(select empno from emp where ename = 'KING') e2  where e1.mgr = e2.empno;

    你可以用EXISTS寫同樣的查詢,你只要把外部查詢一欄移到一個像下面這樣的子查詢環境中就可以了:

    select ename from emp e

        where exists (select 0 from emp where e.mgr = empno and ename = 'KING');

    當你在一個WHERE子句中寫EXISTS時,又等于向最優化傳達了這樣一條信息,即你想讓外部查詢先運行,使用每一個值來從內部查詢(假定:EXISTS=由外而內)中得到一個值。

    關于這個查詢的說明計劃如下:

    OBJECT     OPERATION

    ---------- ----------------------------------------

                 SELECT STATEMENT()

                  FILTER()

    EMP                TABLE ACCESS(FULL)

    EMP                 TABLE ACCESS(BY INDEX ROWID)

    PK_EMP               INDEX(UNIQUE SCAN)

    這實際上與PL/SQL編碼類似:

    set serveroutput on;

    declare

        l_count integer;

    begin

        for e in (select mgr,ename from emp) loop

            select count(*) into l_count from emp

             where e.mgr = empno and ename = 'KING';

            if l_count != 0 then

                dbms_output.put_line(e.ename);

            end if;

        end loop;

    end;

    為了確定在基于規則的最優化中,哪一種子句性能更佳,不妨考慮一下,與外部查詢相比,內部查詢會返回多少行記錄。許多情況下,EXISTS的表現更突出,這是因為,它需要你指定一個加入條件,這就可以調用一個INDEX掃描。盡管如此,如果該查詢的結果很小的話,IN常常表現得更好。你通常都愿意運行那些能首先返回較少的結果的查詢。




主站蜘蛛池模板: 日本高清免费在线 | 天天操天天射天天操 | 亚洲日韩成人 | 欧洲三级在线观看 | 性亚洲| 天天躁狠狠躁 | 亚洲国产精久久久久久久 | 夜夜爽一区二区三区精品 | 日本天堂网站 | 在线视频一区二区三区在线播放 | 日本aⅴ在线不卡免费观看 日本aⅴ在线 | 日韩污视频在线观看 | 伊人久久大香线蕉观看 | 四虎院影永久在线观看 | 色妞bbbb女女女女 | 污视频在线看 | 伊人手机视频 | 青娱分类视频精品免费2 | 欧美一区二区三区久久综合 | 最近最新免费中文字幕一 | 一二三四视频中文字幕在线看 | 日韩视频免费 | 青青草免费公开视频 | 天天做天天躁天天躁 | 亚洲国产精品久久久久 | 午夜欧美福利 | 日韩伦理视频在线观看 | 欧美性猛交xxxx乱大交 | 午夜小视频免费观看 | 日本免费a视频 | 日本高清视频免费在线观看 | 日本亚洲精品色婷婷在线影院 | 日本激情视频在线观看 | 亚洲波多野结衣日韩在线 | 青青久视频 | 一二三四免费观看在线8 | 小视频在线观看免费播放 | 亚洲福利二区 | 五月婷婷亚洲综合 | 四虎永久在线精品视频免费观看 | 四只虎免费永久观看地址 |