對於表的訪問
FULL hint 告訴ORACLE使用全表掃描的方式訪問指定表
例如
SELECT /*+ FULL(EMP) */ *
FROM EMP
WHERE EMPNO =
ROWID hint 告訴ORACLE使用TABLE ACCESS BY ROWID的操作訪問表
通常
如果一個大表沒有被設定為緩存(CACHED)表而你希望它的數據在查詢結束是仍然停留在SGA中
例如
SELECT /*+ FULL(WORKER) CACHE(WORKER)*/ *
FROM WORK;
索引hint 告訴ORACLE使用基於索引的掃描方式
例如
SELECT /*+ INDEX(LODGING) */ LODGING
FROM LODGING
WHERE MANAGER =
在不使用hint的情況下
ORACLE hints 還包括ALL_ROWS
ORDER BY 子句只在兩種嚴格的條件下使用索引
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 >
EXPLAIN PLAN
TABLE ACCESS BY ROWID ON EMP
INDEX RANGE SCAN ON DEPT_IDX
SQL> select * from emp order by empno
Execution Plan
當比較不同數據類型的數據時
假設 EMPNO是一個數值類型的索引列
SELECT …
FROM EMP
WHERE EMPNO =
實際上
SELECT …
FROM EMP
WHERE EMPNO = TO_NUMBER(
幸運的是
現在
SELECT …
FROM EMP
WHERE EMP_TYPE =
這個語句被ORACLE轉換為
SELECT …
FROM EMP
WHERE TO_NUMBER(EMP_TYPE)=
因為內部發生的類型轉換
From:http://tw.wingwit.com/Article/program/Oracle/201311/16677.html