<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Vincent.Chan‘s Blog

    常用鏈接

    統(tǒng)計(jì)

    積分與排名

    網(wǎng)站

    最新評(píng)論

    ORACLE SQL性能優(yōu)化系列 (四)

    ORACLE SQL性能優(yōu)化系列 (四)

    作者: black_snail

     

    關(guān)鍵字 ORACLE SQL PERFORMANCE TUNING

    出處 http://WWW.DBASUPPORT.COM



    13. 計(jì)算記錄條數(shù)

    和一般的觀點(diǎn)相反, count(*) 比count(1)稍快 , 當(dāng)然如果可以通過索引檢索,對(duì)索引列的計(jì)數(shù)仍舊是最快的. 例如 COUNT(EMPNO)


    (譯者按: 在CSDN論壇中,曾經(jīng)對(duì)此有過相當(dāng)熱烈的討論, 作者的觀點(diǎn)并不十分準(zhǔn)確,通過實(shí)際的測試,上述三種方法并沒有顯著的性能差別)


    14. 用Where子句替換HAVING子句


    避免使用HAVING子句, HAVING 只會(huì)在檢索出所有記錄之后才對(duì)結(jié)果集進(jìn)行過濾. 這個(gè)處理需要排序,總計(jì)等操作. 如果能通過WHERE子句限制記錄的數(shù)目,那就能減少這方面的開銷.


    例如:


    低效:

    SELECT REGION,AVG(LOG_SIZE)

    FROM LOCATION

    GROUP BY REGION

    HAVING REGION REGION != ‘SYDNEY'

    AND REGION != ‘PERTH'


    高效

    SELECT REGION,AVG(LOG_SIZE)

    FROM LOCATION

    WHERE REGION REGION != ‘SYDNEY'

    AND REGION != ‘PERTH'

    GROUP BY REGION

    (譯者按: HAVING 中的條件一般用于對(duì)一些集合函數(shù)的比較,如COUNT() 等等. 除此而外,一般的條件應(yīng)該寫在WHERE子句中)


    15. 減少對(duì)表的查詢

    在含有子查詢的SQL語句中,要特別注意減少對(duì)表的查詢.


    例如:

    低效

    SELECT TAB_NAME

    FROM TABLES

    WHERE TAB_NAME = ( SELECT TAB_NAME

    FROM TAB_COLUMNS

    WHERE VERSION = 604)

    AND DB_VER= ( SELECT DB_VER

    FROM TAB_COLUMNS

    WHERE VERSION = 604)


    高效

    SELECT TAB_NAME

    FROM TABLES

    WHERE (TAB_NAME,DB_VER)

    = ( SELECT TAB_NAME,DB_VER)

    FROM TAB_COLUMNS

    WHERE VERSION = 604)


    Update 多個(gè)Column 例子:

    低效:

    UPDATE EMP

    SET EMP_CAT = (SELECT MAX(CATEGORY) FROM EMP_CATEGORIES),

    SAL_RANGE = (SELECT MAX(SAL_RANGE) FROM EMP_CATEGORIES)

    WHERE EMP_DEPT = 0020;


    高效:

    UPDATE EMP

    SET (EMP_CAT, SAL_RANGE)

    = (SELECT MAX(CATEGORY) , MAX(SAL_RANGE)

    FROM EMP_CATEGORIES)

    WHERE EMP_DEPT = 0020;



    16. 通過內(nèi)部函數(shù)提高SQL效率.


    SELECT H.EMPNO,E.ENAME,H.HIST_TYPE,T.TYPE_DESC,COUNT(*)

    FROM HISTORY_TYPE T,EMP E,EMP_HISTORY H

    WHERE H.EMPNO = E.EMPNO

    AND H.HIST_TYPE = T.HIST_TYPE

    GROUP BY H.EMPNO,E.ENAME,H.HIST_TYPE,T.TYPE_DESC;


    通過調(diào)用下面的函數(shù)可以提高效率.

    FUNCTION LOOKUP_HIST_TYPE(TYP IN NUMBER) RETURN VARCHAR2

    AS

    TDESC VARCHAR2(30);

    CURSOR C1 IS

    SELECT TYPE_DESC

    FROM HISTORY_TYPE

    WHERE HIST_TYPE = TYP;

    BEGIN

    OPEN C1;

    FETCH C1 INTO TDESC;

    CLOSE C1;

    RETURN (NVL(TDESC,'?'));

    END;


    FUNCTION LOOKUP_EMP(EMP IN NUMBER) RETURN VARCHAR2

    AS

    ENAME VARCHAR2(30);

    CURSOR C1 IS

    SELECT ENAME

    FROM EMP

    WHERE EMPNO=EMP;

    BEGIN

    OPEN C1;

    FETCH C1 INTO ENAME;

    CLOSE C1;

    RETURN (NVL(ENAME,'?'));

    END;


    SELECT H.EMPNO,LOOKUP_EMP(H.EMPNO),

    H.HIST_TYPE,LOOKUP_HIST_TYPE(H.HIST_TYPE),COUNT(*)

    FROM EMP_HISTORY H

    GROUP BY H.EMPNO , H.HIST_TYPE;


    (譯者按: 經(jīng)常在論壇中看到如 '能不能用一個(gè)SQL寫出….' 的貼子, 殊不知復(fù)雜的SQL往往犧牲了執(zhí)行效率. 能夠掌握上面的運(yùn)用函數(shù)解決問題的方法在實(shí)際工作中是非常有意義的)

    posted on 2006-02-25 22:30 Vincent.Chen 閱讀(172) 評(píng)論(0)  編輯  收藏 所屬分類: Database

    主站蜘蛛池模板: 亚洲人成高清在线播放| 亚洲日韩乱码中文无码蜜桃臀| 亚洲成av人在线观看网站| 成人免费毛片内射美女APP| 亚洲天堂中文字幕在线观看| 91av在线免费视频| 在线电影你懂的亚洲| 日本XXX黄区免费看| 亚洲最大在线观看| 好先生在线观看免费播放| 亚洲中文字幕无码久久| 欧亚精品一区三区免费| 亚洲国产综合AV在线观看| 在线观看91精品国产不卡免费| 青青青亚洲精品国产| 国产精品亚洲二区在线观看| a视频在线观看免费| 亚洲视频在线免费看| 亚洲人成电影网站免费| 亚洲AV噜噜一区二区三区 | 牛牛在线精品免费视频观看| 一二三四在线播放免费观看中文版视频 | 亚洲免费视频观看| 亚洲免费网站观看视频| 亚洲国产精品激情在线观看| a级片在线免费看| 亚洲一区在线免费观看| 波多野结衣免费视频观看| a级精品九九九大片免费看| 亚洲人成电影网站| 亚洲福利在线播放| 无码人妻AV免费一区二区三区| 日本亚洲精品色婷婷在线影院| 国产91在线免费| 日本中文字幕免费高清视频| 亚洲性线免费观看视频成熟| 亚洲成?v人片天堂网无码| 精品无码AV无码免费专区 | 亚洲av无码专区首页| 亚洲av无码无在线观看红杏| 亚洲第一成年免费网站|