Optimizer 依「索引類型」+「WHERE 條件」+「統計資訊」決定掃描方式,理解四大類型邊界條件是讀懂執行計畫的關鍵。
CREATE UNIQUE INDEX ux_emp ON emp(empno); SELECT * FROM emp WHERE empno = 7788;CREATE UNIQUE INDEX ux_emp ON emp(deptno, empno); 條件必須包含 deptno (引導欄),否則退化為 Range Scan。>, <, >=, <=, BETWEEN, LIKE 'prefix%')。-- 唯一索引 + 範圍
SELECT * FROM emp WHERE empno > 7500;
-- 組合索引 (deptno, empno) 僅給 deptno
SELECT * FROM emp WHERE deptno = 10;
-- 非唯一索引
CREATE INDEX ix_emp_dept ON emp(deptno);
SELECT * FROM emp WHERE deptno = 10;
ORDER BY 欄位為索引引導欄,可避免排序。INDEX_FFS 強制 Fast Full Scan,INDEX 可能觸發 Full Scan。DB_FILE_MULTIBLOCK_READ_COUNT)。PARALLEL Hint/表屬性)。| 特性 | Index Full Scan | Index Fast Full Scan |
|---|---|---|
| 輸出順序 | 有序 (索引鍵序) | 無序 (物理儲存序) |
| 讀取方式 | 單區塊讀取 | 多區塊讀取 |
| 並行支援 | 否 | 是 |
| 可否避免排序 | 是 | 否 |
| 目標 | 手段 |
|---|---|
| 強制 Unique/Range Scan | INDEX(t idx_name) Hint;確保統計資訊準確、欄位無函數包裹 |
| 避免 Full Table Scan 改走 IFFS | 建立 Covering Index 包含 SELECT/WHERE 所有欄位 |
| 避免不必要的 IFFS (並行壓力大) | NO_INDEX_FFS Hint;調降 PARALLEL_DEGREE_POLICY |
| 利用索引避免 ORDER BY 排序 | 索引引導欄 = ORDER BY 欄位 → 自然產生 Index Full Scan |
四大掃描類型形成「精準定位 → 範圍順讀 → 有序全讀 → 無序並行全讀」的效能遞增、適用面擴大階梯。掌握觸發條件與 Hint 控制,是 SQL 調優的核心技能。