<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
     

    43.       WHERE替代ORDER BY

    ORDER BY 子句只在兩種嚴(yán)格的條件下使用索引.

     

    ORDER BY中所有的列必須包含在相同的索引中并保持在索引中的排列順序.

    ORDER BY中所有的列必須定義為非空.

     

    WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列.

     

    例如:

          DEPT包含以下列:

     

            DEPT_CODE    PK    NOT NULL

            DEPT_DESC           NOT NULL

            DEPT_TYPE           NULL

       

           非唯一性的索引(DEPT_TYPE)

     

         低效: (索引不被使用)

                SELECT DEPT_CODE

                FROM DEPT

                ORDER BY DEPT_TYPE

     

           EXPLAIN PLAN:

                SORT ORDER BY

                      TABLE ACCESS FULL

     

         高效: (使用索引)

     

               SELECT DEPT_CODE

               FROM DEPT

            WHERE DEPT_TYPE > 0

      

     EXPLAIN PLAN:

          TABLE ACCESS BY ROWID ON EMP

                 INDEX RANGE SCAN ON DEPT_IDX

    譯者按:

          ORDER BY 也能使用索引! 這的確是個(gè)容易被忽視的知識(shí)點(diǎn). 我們來(lái)驗(yàn)證一下:

    SQL>  select * from emp order by empno;

    Execution Plan

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

       0      SELECT STATEMENT Optimizer=CHOOSE

       1    0   TABLE ACCESS (BY INDEX ROWID) OF 'EMP'

       2    1     INDEX (FULL SCAN) OF 'EMPNO' (UNIQUE)

     

    44.       避免改變索引列的類型.

    當(dāng)比較不同數(shù)據(jù)類型的數(shù)據(jù)時(shí), ORACLE自動(dòng)對(duì)列進(jìn)行簡(jiǎn)單的類型轉(zhuǎn)換.

     

    假設(shè) EMPNO是一個(gè)數(shù)值類型的索引列.

     

    SELECT …

    FROM EMP

    WHERE EMPNO = ‘123’

     

    實(shí)際上,經(jīng)過(guò)ORACLE類型轉(zhuǎn)換, 語(yǔ)句轉(zhuǎn)化為:

    SELECT …

    FROM EMP

    WHERE EMPNO = TO_NUMBER(‘123’)

     

    幸運(yùn)的是,類型轉(zhuǎn)換沒(méi)有發(fā)生在索引列上,索引的用途沒(méi)有被改變.

     

    現(xiàn)在,假設(shè)EMP_TYPE是一個(gè)字符類型的索引列.

    SELECT …

    FROM EMP

    WHERE EMP_TYPE = 123

     

    這個(gè)語(yǔ)句被ORACLE轉(zhuǎn)換為:

    SELECT …

    FROM EMP

    WHERE TO_NUMBER(EMP_TYPE)=123

     

    因?yàn)閮?nèi)部發(fā)生的類型轉(zhuǎn)換, 這個(gè)索引將不會(huì)被用到!

    譯者按:

    為了避免ORACLE對(duì)你的SQL進(jìn)行隱式的類型轉(zhuǎn)換, 最好把類型轉(zhuǎn)換用顯式表現(xiàn)出來(lái). 注意當(dāng)字符和數(shù)值比較時(shí), ORACLE會(huì)優(yōu)先轉(zhuǎn)換數(shù)值類型到字符類型.

     

    45.       需要當(dāng)心的WHERE子句

    某些SELECT 語(yǔ)句中的WHERE子句不使用索引. 這里有一些例子.

    在下面的例子里, ‘!=’ 將不使用索引. 記住, 索引只能告訴你什么存在于表中, 而不能告訴你什么不存在于表中.

    不使用索引:

    SELECT ACCOUNT_NAME

    FROM TRANSACTION

    WHERE AMOUNT !=0;

    使用索引:

    SELECT ACCOUNT_NAME

    FROM TRANSACTION

    WHERE AMOUNT >0;

     

    下面的例子中, ‘||’是字符連接函數(shù). 就象其他函數(shù)那樣, 停用了索引.

    不使用索引:

    SELECT ACCOUNT_NAME,AMOUNT

    FROM TRANSACTION

    WHERE ACCOUNT_NAME||ACCOUNT_TYPE=’AMEXA’;

    使用索引:

    SELECT ACCOUNT_NAME,AMOUNT

    FROM TRANSACTION

    WHERE ACCOUNT_NAME = ‘AMEX’

    AND  ACCOUNT_TYPE=’ A’;

     

    下面的例子中, ‘+’是數(shù)學(xué)函數(shù). 就象其他數(shù)學(xué)函數(shù)那樣, 停用了索引.

    不使用索引:

    SELECT ACCOUNT_NAME, AMOUNT

    FROM TRANSACTION

    WHERE AMOUNT + 3000 >5000;

    使用索引:

    SELECT ACCOUNT_NAME, AMOUNT

    FROM TRANSACTION

    WHERE AMOUNT > 2000 ;

    下面的例子中,相同的索引列不能互相比較,這將會(huì)啟用全表掃描.

    不使用索引:

    SELECT ACCOUNT_NAME, AMOUNT

    FROM TRANSACTION

    WHERE ACCOUNT_NAME = NVL(:ACC_NAME,ACCOUNT_NAME);

    使用索引:

    SELECT ACCOUNT_NAME, AMOUNT

    FROM TRANSACTION

    WHERE ACCOUNT_NAME LIKE NVL(:ACC_NAME,’%’);

     

    譯者按:

    如果一定要對(duì)使用函數(shù)的列啟用索引, ORACLE新的功能: 基于函數(shù)的索引(Function-Based Index) 也許是一個(gè)較好的方案.

     CREATE INDEX EMP_I ON EMP (UPPER(ename)); /*建立基于函數(shù)的索引*/

     SELECT * FROM emp WHERE UPPER(ename) = ‘BLACKSNAIL’; /*將使用索引*/


    主站蜘蛛池模板: 亚洲AV无码乱码在线观看| 九九精品免费视频| 亚洲精品A在线观看| 一区免费在线观看| 亚洲日本韩国在线| jyzzjyzz国产免费观看| 亚洲人妻av伦理| 狠狠躁狠狠爱免费视频无码| 中文字幕亚洲不卡在线亚瑟| 中国一级特黄高清免费的大片中国一级黄色片 | 亚洲天堂一区在线| 亚洲香蕉免费有线视频| 亚洲18在线天美| 国产成人免费片在线观看| 亚洲AV噜噜一区二区三区| 全亚洲最新黄色特级网站| 一级毛片免费播放视频| 亚洲中文字幕无码中文字在线| 在线看片免费人成视频久网下载| 亚洲AV无码乱码国产麻豆 | 国产午夜精品理论片免费观看| 国产亚洲精品va在线| 午夜免费福利视频| 国产成人亚洲综合一区| 免费国产怡红院在线观看| rh男男车车的车车免费网站| 亚洲AV无码专区电影在线观看| 四虎成年永久免费网站 | 亚洲人成综合网站7777香蕉| 永久免费看bbb| 9i9精品国产免费久久| 久久久久亚洲AV无码永不| 成年女人男人免费视频播放| 成人a毛片免费视频观看| 亚洲av无码一区二区三区网站 | 妞干网在线免费视频| 一区在线免费观看| 亚洲自偷自拍另类图片二区| 永久免费AV无码网站在线观看| 四虎影视无码永久免费| 国产成+人+综合+亚洲专|