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

    出處 http://www.dbasupport.com



    27. 基礎(chǔ)表的選擇


    基礎(chǔ)表(Driving Table)是指被最先訪問(wèn)的表(通常以全表掃描的方式被訪問(wèn)). 根據(jù)優(yōu)化器的不同, SQL語(yǔ)句中基礎(chǔ)表的選擇是不一樣的.

    如果你使用的是CBO (COST BASED OPTIMIZER),優(yōu)化器會(huì)檢查SQL語(yǔ)句中的每個(gè)表的物理大小,索引的狀態(tài),然后選用花費(fèi)最低的執(zhí)行路徑.

    如果你用RBO (RULE BASED OPTIMIZER) , 并且所有的連接條件都有索引對(duì)應(yīng), 在這種情況下, 基礎(chǔ)表就是FROM 子句中列在最后的那個(gè)表.

    舉例:

    SELECT A.NAME , B.MANAGER

    FROM WORKER A,

    LODGING B

    WHERE A.LODGING = B.LODING;

    由于LODGING表的LODING列上有一個(gè)索引, 而且WORKER表中沒(méi)有相比較的索引, WORKER表將被作為查詢中的基礎(chǔ)表.



    28. 多個(gè)平等的索引

    當(dāng)SQL語(yǔ)句的執(zhí)行路徑可以使用分布在多個(gè)表上的多個(gè)索引時(shí), ORACLE會(huì)同時(shí)使用多個(gè)索引并在運(yùn)行時(shí)對(duì)它們的記錄進(jìn)行合并, 檢索出僅對(duì)全部索引有效的記錄.

    在ORACLE選擇執(zhí)行路徑時(shí),唯一性索引的等級(jí)高于非唯一性索引. 然而這個(gè)規(guī)則只有

    當(dāng)WHERE子句中索引列和常量比較才有效.如果索引列和其他表的索引類相比較. 這種子句在優(yōu)化器中的等級(jí)是非常低的.

    如果不同表中兩個(gè)想同等級(jí)的索引將被引用, FROM子句中表的順序?qū)Q定哪個(gè)會(huì)被率先使用. FROM子句中最后的表的索引將有最高的優(yōu)先級(jí).

    如果相同表中兩個(gè)想同等級(jí)的索引將被引用, WHERE子句中最先被引用的索引將有最高的優(yōu)先級(jí).

    舉例:

    DEPTNO上有一個(gè)非唯一性索引,EMP_CAT也有一個(gè)非唯一性索引.

    SELECT ENAME,

    FROM EMP

    WHERE DEPT_NO = 20

    AND EMP_CAT = ‘A';

    這里,DEPTNO索引將被最先檢索,然后同EMP_CAT索引檢索出的記錄進(jìn)行合并. 執(zhí)行路徑如下:



    TABLE ACCESS BY ROWID ON EMP

    AND-EQUAL

    INDEX RANGE SCAN ON DEPT_IDX

    INDEX RANGE SCAN ON CAT_IDX



    29. 等式比較和范圍比較

    當(dāng)WHERE子句中有索引列, ORACLE不能合并它們,ORACLE將用范圍比較.


    舉例:

    DEPTNO上有一個(gè)非唯一性索引,EMP_CAT也有一個(gè)非唯一性索引.

    SELECT ENAME

    FROM EMP

    WHERE DEPTNO > 20

    AND EMP_CAT = ‘A';



    這里只有EMP_CAT索引被用到,然后所有的記錄將逐條與DEPTNO條件進(jìn)行比較. 執(zhí)行路徑如下:

    TABLE ACCESS BY ROWID ON EMP

    INDEX RANGE SCAN ON CAT_IDX



    30. 不明確的索引等級(jí)


    當(dāng)ORACLE無(wú)法判斷索引的等級(jí)高低差別,優(yōu)化器將只使用一個(gè)索引,它就是在WHERE子句中被列在最前面的.

    舉例:

    DEPTNO上有一個(gè)非唯一性索引,EMP_CAT也有一個(gè)非唯一性索引.


    SELECT ENAME

    FROM EMP

    WHERE DEPTNO > 20

    AND EMP_CAT > ‘A';


    這里, ORACLE只用到了DEPT_NO索引. 執(zhí)行路徑如下:


    TABLE ACCESS BY ROWID ON EMP

    INDEX RANGE SCAN ON DEPT_IDX


    譯者按:

    我們來(lái)試一下以下這種情況:

    SQL> select index_name, uniqueness from user_indexes where table_name = 'EMP';


    INDEX_NAME UNIQUENES

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

    EMPNO UNIQUE

    EMPTYPE NONUNIQUE


    SQL> select * from emp where empno >= 2 and emp_type = 'A' ;


    no rows selected



    Execution Plan

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

    0 SELECT STATEMENT Optimizer=CHOOSE

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

    2 1 INDEX (RANGE SCAN) OF 'EMPTYPE' (NON-UNIQUE)


    雖然EMPNO是唯一性索引,但是由于它所做的是范圍比較, 等級(jí)要比非唯一性索引的等式比較低!

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

    主站蜘蛛池模板: 美女18一级毛片免费看| 中文字幕av免费专区| yy6080久久亚洲精品| 中文字幕永久免费| 亚洲成人免费网站| 国产一区二区三区免费在线观看| av午夜福利一片免费看久久| 91亚洲自偷手机在线观看| 国产高清免费在线| 老司机69精品成免费视频| 中国亚洲呦女专区| 亚洲国产成人片在线观看无码| 在线a级毛片免费视频| 黄床大片免费30分钟国产精品| 亚洲av无码一区二区三区观看| 亚洲国产精品无码久久九九| 免费看h片的网站| 一级**爱片免费视频| 亚洲精品天堂在线观看| 久久久久久久综合日本亚洲 | 亚洲日韩中文无码久久| 成人影片麻豆国产影片免费观看| 久久精品成人免费观看97| 久久亚洲熟女cc98cm| 亚洲av区一区二区三| 歪歪漫画在线观看官网免费阅读| 91视频免费观看高清观看完整| 伊人久久亚洲综合影院首页| 亚洲gv白嫩小受在线观看| 免费在线观看亚洲| 国产成人午夜精品免费视频| 久久免费看少妇高潮V片特黄| 无人视频在线观看免费播放影院| 亚洲日韩在线视频| 亚洲国产精品乱码一区二区| 亚洲精品成人久久久| 日韩免费一区二区三区| 波多野结衣在线免费观看| 国产精品白浆在线观看免费| 九九视频高清视频免费观看| 亚洲国产精品自在自线观看|