在Oracle数据库中,全表扫描(Full Table Scan,FTS)是指数据库系统读取表中所有的行,并检查每一行是否满足WHERE限制条件。Oracle通过顺序读取表中的每个数据块,直到达到表的最高水位线(High Water Mark, HWM),表示表的最后一个数据块。通过多块读操作(通过设置db_block_multiblock_read_count参数)可以一次性读取多个数据块,从而减少I/O操作次数,显著提高系统的吞吐量。这种操作只在全表扫描时可用,每个数据块在全表扫描中仅被读取一次。
需要注意的是,虽然删除操作不会影响HWM的值,因此即使表中的所有数据被删除,全表扫描的性能仍不会得到改善。为了优化全表扫描,通常需要使用TRUNCATE命令清空表内容并重新调整HWM。幸运的是,在Oracle 10g及之后的版本中,可以通过手动收缩HWM值来优化性能。
此外,全表扫描一般不适用于大表,除非你需要检索超过表中数据总量的5%-10%的数据,或者打算利用并行查询功能。在进行全表扫描时,Oracle会将扫描的数据存放在内存的Least Recently Used (LRU)列表尾部,以便快速交换出不常用的数据,避免占用过多内存资源。