索引全扫描(INDEX FULL SCAN)虽然与索引快速全扫描只差了“快速”(FAST),但其访问方法却与后者有明显差别:其一,索引全扫描是单块读,而索引快速全扫描是多块读。其二,索引全扫描是按叶子块的逻辑顺序,依序读取的,所以,它可以保证读取的值是有序的。而索引快速全扫描不能保证。第三,索引全扫描会沿着索引树形结构中定位最左侧(或最右侧)叶子块的路径,访问相关的索引根块和分支块,然后从该最左侧(或最右侧)叶子块开始,沿着叶子块中的双向链表,依序访问全部的叶子块。因此,索引全扫描只会访问部分分支块。
下面,我们仍然沿用前面创建的表和索引,来观察索引全扫描的行为。
由于在我们的样例表和索引中,索引的大小已经接近表的大小,同时,又由于记录数较小,所以,从成本上评估时,索引快速全扫后再排序的代价,总是小于索引全扫的代价。这就导致很难模拟出索引全扫描的行为。因为,我们尝试修改索引的统计信息,将叶子块数量修改为1,使其在评估成本时,对索引的全扫描的成本可以小于索引快速全扫描的成本,进而可以走了索引全扫描的访问方法。
修改索引中有关叶子块数量的统计信息:
图 53
然后,我们执行以下查询,构造出索引全扫描的行为:
图 54