索引聚簇因子用于测量相对于某个索引值(如雇员姓氏)的行顺序。被索引值的行存储得越有序,则聚簇因子越低。因为我们常用的表是堆表,数据的存储是“无序”存放在磁盘或存储上;如果所查的数据越无序越分散,查询的逻辑IO
虽然一样,但是物理IO的代价就可能很高了。
如果聚簇因子较高,则在大型索引范围扫描过程中,数据库将执行相对较高数目的I/O。索引条目指向随机表块,因此数据库可能必须一遍又一遍地来回重读索引所指向的同一数据块。
如果聚簇因子较低,则在大型索引范围扫描过程中数据库将执行相对较低数目的I/O。在一个范围内的索引键倾向于指向相同的数据块,因此该数据库不必来回重读相同的数据块。
例如:
场景:以姓氏为顺序存放多条数据,并放置多个数据块上,
假设在姓氏列上存在一个索引。每个姓氏条目对应于一个 rowid。从概念上讲,索引条目看起来如下所示:
Abel,block1row1
Ande,block1row2
Atkinson,block1row3
Austin,block1row4
Baer,block1row5
假设在雇员 ID 列上存在另一个单独的索引。从概念上讲,索引条目可能看起来像下面这样,雇员 id几乎分布在这整个两个数据块的任意位置:
100,block1row50
101,block2row1
102,block1row9
103,block2row19
104,block2row39
105,block1row4
.
.
通过ALL_INDEXES 查看这两个索引的聚簇因子。EMP_NAME_IX 的聚簇因子较低,这意味着在一
虽然一样,但是物理IO的代价就可能很高了。
如果聚簇因子较高,则在大型索引范围扫描过程中,数据库将执行相对较高数目的I/O。索引条目指向随机表块,因此数据库可能必须一遍又一遍地来回重读索引所指向的同一数据块。
如果聚簇因子较低,则在大型索引范围扫描过程中数据库将执行相对较低数目的I/O。在一个范围内的索引键倾向于指向相同的数据块,因此该数据库不必来回重读相同的数据块。
例如:
场景:以姓氏为顺序存放多条数据,并放置多个数据块上,
假设在姓氏列上存在一个索引。每个姓氏条目对应于一个 rowid。从概念上讲,索引条目看起来如下所示:
Abel,block1row1
Ande,block1row2
Atkinson,block1row3
Austin,block1row4
Baer,block1row5
假设在雇员 ID 列上存在另一个单独的索引。从概念上讲,索引条目可能看起来像下面这样,雇员 id几乎分布在这整个两个数据块的任意位置:
100,block1row50
101,block2row1
102,block1row9
103,block2row19
104,block2row39
105,block1row4
.
.
通过ALL_INDEXES 查看这两个索引的聚簇因子。EMP_NAME_IX 的聚簇因子较低,这意味着在一