全表扫描 (FTS) 是 Oracle 在执行查询时的一种访问方式,它会读取表中所有行,并检查每一行是否符合 WHERE 限制条件。Oracle 通过顺序读取表中分配的数据块,直到达到表的最高水位标记 (HWM, High Water Mark),标识表中最后一块数据块的位置。在全表扫描过程中,Oracle 可使用 多块读操作(由 db_block_multiblock_read_count 参数控制),这可以在一次 I/O 操作中读取多个数据块,从而有效降低 I/O 次数,提高系统吞吐量。"
"但是需要注意的是,全表扫描通常只有在处理较大数据量时才能发挥优势,一般建议在查询返回的数据量超过表总量的 5%-10% 时使用全表扫描。此外,全表扫描的效率也与表的 HWM 值密切相关。删除数据不会自动更新 HWM 值,因此即便大量数据被删除,全表扫描的性能也可能没有显著改进。为了优化这一点,可以使用 TRUNCATE 命令来重置 HWM。幸运的是,Oracle 10g 以后,提供了手动调整 HWM 的功能。"
"当使用全表扫描时,查询的结果会被放入高速缓存的 LRU(Least Recently Used) 列表尾部,这意味着它会迅速从内存中移除,避免占用过多内存空间。"
"使用全表扫描的一个常见例子:
SQL> explain plan for select * from dual;
查询计划:
SELECT STATEMENT [CHOOSE] Cost=
TABLE ACCESS FULL DUAL