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

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

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

    海鷗航際

    JAVA站
    posts - 11, comments - 53, trackbacks - 1, articles - 102

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

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

     

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

     

    14.       Where子句替換HAVING子句

     

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

     

    例如:

     

         低效:

         SELECT REGIONAVG(LOG_SIZE)

         FROM LOCATION

         GROUP BY REGION

         HAVING REGION REGION != ‘SYDNEY

         AND REGION != ‘PERTH

     

         高效

         SELECT REGIONAVG(LOG_SIZE)

         FROM LOCATION

         WHERE REGION REGION != ‘SYDNEY

         AND REGION != ‘PERTH

         GROUP BY REGION

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

     

    15.       減少對表的查詢

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

      

    例如:

         低效

              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í)際工作中是非常有意義的)

     

     (待續(xù))


    主站蜘蛛池模板: 一本久久A久久免费精品不卡 | 成人毛片18女人毛片免费| 九九视频高清视频免费观看| 亚洲国产成人久久三区| 亚洲综合图色40p| 免费看国产曰批40分钟| aa级一级天堂片免费观看| 97人妻精品全国免费视频| 男女猛烈激情xx00免费视频| 77777亚洲午夜久久多喷| 少妇中文字幕乱码亚洲影视| 亚洲中文字幕无码爆乳av中文 | 亚洲一级黄色大片| 亚洲av无码av制服另类专区| 亚洲午夜激情视频| 四虎永久免费影院| 四虎成人免费网址在线| 18女人水真多免费高清毛片| 暖暖免费日本在线中文| 中国黄色免费网站| 一区二区三区免费电影| 亚洲国产高清国产拍精品| 亚洲一线产品二线产品| 精品亚洲AV无码一区二区三区 | 91久久青青草原线免费| 一级毛片免费不卡在线| 日韩精品无码免费专区午夜| 一个人看的www视频免费在线观看| 成人精品国产亚洲欧洲| 色天使色婷婷在线影院亚洲| 亚洲国产欧洲综合997久久| 亚洲色丰满少妇高潮18p| 亚洲色大成网站www尤物| 亚洲欧美第一成人网站7777| 国产亚洲精品VA片在线播放| 亚洲综合久久一本伊伊区| 亚洲国产成人手机在线电影bd| 亚洲欧洲日本国产| 亚洲一区二区三区在线 | 日韩视频在线免费观看| 亚洲精品国产字幕久久不卡|