DB_FILE_MULTIBLOCK_READ_COUNT),單次I/O讀多個區塊EXPLAIN PLAN FOR SELECT * FROM dual;
-- TABLE ACCESS FULL DUAL
EXPLAIN PLAN FOR SELECT * FROM dept WHERE rowid = 'AAAAyGAADAAAAATAAF';
-- TABLE ACCESS BY ROWID DEPT
關鍵洞察:若查詢欄位全在索引中,可省略第2階段 (Index Only Scan),效能大增。
| 類型 | 觸發條件 | 特點 | 範例 |
|---|---|---|---|
| INDEX UNIQUE SCAN | 唯一索引 + 等值條件 (PK/UK) | 回傳單一ROWID,最精準 | WHERE empno = 10 (PK) |
| INDEX RANGE SCAN | ① 唯一索引+範圍操作符(>,<,>=,<=,BETWEEN) ② 複合索引僅用前導欄位 ③ 非唯一索引任何查詢 | 回傳多個ROWID,順序讀取 | WHERE empno > 7876 |
| INDEX FULL SCAN | 查詢欄位全在索引中,需排序輸出 | 單區塊讀取索引葉子塊,按序輸出 | SELECT empno,ename FROM big_emp ORDER BY empno,ename (複合索引) |
| INDEX FAST FULL SCAN | 查詢欄位全在索引中,不需排序 | 多區塊讀取,可平行,最高吞吐量 | SELECT empno,ename FROM big_emp (複合索引) |
-- 僅查詢索引欄位 → INDEX FAST FULL SCAN (最快)
SELECT empno FROM big_emp;
-- 查詢索引欄位+排序 → INDEX FULL SCAN
SELECT empno, ename FROM big_emp ORDER BY empno, ename;
-- 範圍查詢 + 回表 → INDEX RANGE SCAN + TABLE ACCESS BY ROWID
SELECT empno, ename FROM emp WHERE empno > 7876 ORDER BY empno;
避坑指南:INDEX FAST FULL SCAN不保證順序,若需排序必須顯式ORDER BY,優化器會轉為INDEX FULL SCAN或排序操作。