填充因子

注意:
填充因子的值 0 和 100 在所有方面都是相同的。

可以使用 CREATE INDEXALTER INDEX 语句来设置各个索引的填充因子值。若要修改服务器范围的默认值,请使用 sp_configure 系统存储过程。若要查看一个或多个索引的填充因子值,请使用 sys.indexes

重要提示:
只有在创建或重新生成了索引后,才会应用填充因子设置。SQL Server 数据库引擎并不会在页中动态保持指定的可用空间百分比。如果试图在数据页上保持额外的空间,将有背于使用填充因子的本意,因为随着数据的输入,数据库引擎将不得不在每一页上进行页拆分,以保持填充因子所指定的可用空间百分比。

性能注意事项

重新组织和重新生成索引

虽然采用较小的非零填充因子值可减少随着索引的增长而拆分页的需求,但是索引将需要更多的存储空间,并且会降低读取性能。即使对于面向许多插入和更新操作的应用程序,数据库的读取次数一般也会超过数据库写入次数的 5 到 10 倍。因此,指定一个不同于默认值的填充因子会降低数据库的读取性能,而降低量与填充因子设置的值成反比。例如,当填充因子的值为 50 时,数据库的读取性能会降低两倍。读取性能降低是因为索引包含较多的页,因此增加了检索数据所需的磁盘 I/O 操作。

将数据添加到表的末尾

如果新数据在表中均匀分布,则不是 0 或 100 的非零填充因子对性能有利。但是,如果所有数据都添加到表的末尾,则不会填充索引页中的可用空间。例如,如果索引键列是 IDENTITY 列,则新行的键将总是增加,并且索引行在逻辑意义上将添加到索引的末尾。如果将用加长行的大小的数据来更新现有行,则请使用小于 100 的填充因子。每页上的额外字节将有助于把行中的额外长度造成的页拆分降低到最小限度。

相关文章: