若查询列全在索引中 (覆盖索引),可省略第 2 步,效果显著。
| 类型 | 触发条件 | 排序 | 多块读 | 典型 Cost |
|---|---|---|---|---|
| INDEX UNIQUE SCAN | 唯一索引 + 等值谓词 (PK/UK),返回 ≤ 1 行 | 无需 | 否 | 1 |
| INDEX RANGE SCAN | 范围谓词 (>, <, BETWEEN, LIKE) 或非唯一索引等值 | 按索引顺序 | 否 | 视范围 |
| INDEX FULL SCAN | CBO 判定全索引扫描优于全表,且需有序输出 | 有序 | 否 | 中等 |
| INDEX FAST FULL SCAN | 仅需索引列数据,不要求顺序,CBO 启用 | 无序 | ✅ 支持 | 低 |
SELECT EMPNO, ENAME FROM EMP WHERE EMPNO = 10;
-- TABLE ACCESS BY ROWID EMP
-- INDEX UNIQUE SCAN EMP_I1
SELECT EMPNO FROM EMP WHERE EMPNO = 10;
-- INDEX UNIQUE SCAN EMP_I1 (无 TABLE ACCESS)
SELECT EMPNO, ENAME FROM EMP WHERE EMPNO > 7876 ORDER BY EMPNO;
-- TABLE ACCESS BY ROWID EMP
-- INDEX RANGE SCAN EMP_I1 (已有序,省 SORT ORDER BY)
INDEX FAST FULL SCAN 适合 COUNT(*)、全列聚合等不需顺序场景,可并行。「有索引就一定快」——错!索引维护成本 (DML 开销、空间、碎片) 与查询收益须权衡;低选择性索引反而拖慢写入且优化器可能忽略。