国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

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

2024-08-29 13:43:15
字體:
供稿:網(wǎng)友

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

 

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

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

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

舉例:

     SELECT A.NAME , B.MANAGER

     FROM WORKER A, 

             LODGING B

     WHERE A.LODGING = B.LODING;

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

 

28.       多個平等的索引

當(dāng)SQL語句的執(zhí)行路徑可以使用分布在多個表上的多個索引時, Oracle會同時使用多個索引并在運行時對它們的記錄進行合并, 檢索出僅對全部索引有效的記錄.

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

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

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

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

舉例:

     DEPTNO上有一個非唯一性索引,EMP_CAT也有一個非唯一性索引.

     SELECT ENAME,

     FROM EMP

     WHERE DEPT_NO = 20

     AND EMP_CAT = ‘A’;

這里,DEPTNO索引將被最先檢索,然后同EMP_CAT索引檢索出的記錄進行合并. 執(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上有一個非唯一性索引,EMP_CAT也有一個非唯一性索引.

     SELECT ENAME

     FROM EMP

     WHERE DEPTNO > 20

     AND EMP_CAT = ‘A’;


    

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

     TABLE ACCESS BY ROWID ON EMP 

           INDEX RANGE SCAN ON CAT_IDX

 

30.       不明確的索引等級

 

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

     舉例:

     DEPTNO上有一個非唯一性索引,EMP_CAT也有一個非唯一性索引.

     

     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

 

譯者按:

我們來試一下以下這種情況:

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是唯一性索引,但是由于它所做的是范圍比較, 等級要比非唯一性索引的等式比較低!


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 乐陵市| 长顺县| 广汉市| 宁强县| 五莲县| 青冈县| 安岳县| 遵义市| 什邡市| 宜州市| 通渭县| 平凉市| 黄平县| 故城县| 视频| 万安县| 沽源县| 纳雍县| 改则县| 七台河市| 太仆寺旗| 固原市| 阳西县| 宜川县| 贵定县| 高密市| 长子县| 科技| 朔州市| 汪清县| 嘉定区| 井冈山市| 漠河县| 永城市| 滨海县| 蓬安县| 高平市| 灵山县| 开阳县| 泰和县| 沭阳县|