<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 PERFORMANCE TUNING PL/SQL

    出處 http://www.dbasupport.com



    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). 我們來驗(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)過ORACLE類型轉(zhuǎn)換, 語句轉(zhuǎn)化為:

    SELECT …

    FROM EMP

    WHERE EMPNO = TO_NUMBER(‘123')


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


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

    SELECT …

    FROM EMP

    WHERE EMP_TYPE = 123


    這個(gè)語句被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)出來. 注意當(dāng)字符和數(shù)值比較時(shí), ORACLE會(huì)優(yōu)先轉(zhuǎn)換數(shù)值類型到字符類型.



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

    某些SELECT 語句中的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'; /*將使用索引*/

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

    主站蜘蛛池模板: 91免费国产自产地址入| 四虎国产精品免费永久在线| 黄网站色在线视频免费观看| 亚洲第一中文字幕| 久久久免费的精品| 亚洲最大在线观看| 99视频在线精品免费观看6| 亚洲欧洲日韩极速播放| 毛片网站免费在线观看| 亚洲av无码专区青青草原| 国产成人免费一区二区三区| 香蕉视频免费在线| 中文亚洲AV片不卡在线观看| 青青草原1769久久免费播放| 久久亚洲精品无码VA大香大香| 波多野结衣在线免费视频| 亚洲欧美日韩中文字幕一区二区三区 | 久久久久亚洲AV综合波多野结衣 | 成人毛片18女人毛片免费| 亚洲欧洲精品成人久久曰| 亚洲精品网站在线观看不卡无广告 | 老汉精品免费AV在线播放| 亚洲国产成a人v在线| 四虎成人免费网站在线| 91视频免费观看| 久久精品亚洲综合专区| 无码国产精品一区二区免费| 亚洲黄页网在线观看| 亚洲国产人成精品| 久久精品免费观看| 中文字幕无码亚洲欧洲日韩| 亚洲Av无码乱码在线观看性色| 久久久久免费精品国产| 国产精品亚洲精品| 中文字幕亚洲激情| 亚洲第一成年免费网站| 男人和女人高潮免费网站| 亚洲高清视频免费| 亚洲成片观看四虎永久| **aaaaa毛片免费| 欧洲美女大片免费播放器视频 |