创建聚合索引时,表中的数据按索引列中的值顺序存储在数据库的数据页中。 在表中插入新数据行或更改索引列的值时,Microsoft SQL Server 2000可能需要重新组织表的数据存储,以便为新行留出空间并维护数据的有序存储这也适用于非聚集索引。 添加或修改数据时,SQL Server可能需要重新组织非聚合索引页的数据存储区。 向已满的索引页添加新行时,SQL Server会将大约一半的行移动到新页中,为新行留出空间。 这种重组称为页面分割。 分割页面会降低性能,并导致表中的数据存储区出现碎片。 顶级的
创建索引时,可以指定填充因子,以便在索引的每个叶级页上留出额外的空间,并扩展将来表的数据存储容量或减少分页的可能性。 填充因子的值是0到100之间的百分比,用于指定已编制索引的数据页的填充百分比。 值为100表示页面已满,保留的存储容量最小。 仅当数据保持不变时(如只读表),才使用此设置。 值越小,数据页上的可用空间就越大,因此在索引增加时就越不需要拆分数据页,但需要更多的存储空间。 如果表中的数据发生更改,则此设置较好。
提供填充因子选项是为了微调性能。 但是,在许多情况下,最好使用sp_configure系统存储过程中指定的服务器范围的缺省填充因子。
即使在许多插入和更新操作的APP会话中,读取数据库的次数通常也超过写入数据库的5~10倍。 因此,指定与默认设置不同的填充因子会降低数据库的读取性能,降低量与填充因子设置成反比。 例如,如果填充因子值为50%,则数据库的读取性能将加倍。
只有在表中基于现有数据创建新索引,并且能够准确预测将来对这些数据的更改时,将填充因子选项设置为其他值才是有用的。
仅在创建索引时执行填充因子; 建立索引后,如果添加、删除或更新表中的数据,将不会保留填充因子。 如果尝试在数据页上保留额外的空间,这将违背使用填充因子的意图。 因为在输入数据时,SQL Server必须在每页上进行分页,以保持由填充因子指定的可用空间百分比。 因此,如果表中的数据发生了重大更改并添加了新数据,则可以填充数据页的可用空间。 在这种情况下,可以重新创建索引,并通过重新指定填充因子来重新分配数据。