索引的填充因子百分比是指首次创建索引时索引页的叶级别充满程度。如果没有显式设置填允因子,则它默认为0,即尽最大可能来填充页(SQL Serve浍保留一些可用空间——讨于单个索引行足够了)。然而保留一些可用空间允许插入新行时不拆分页。添加新行到充满的索引页会引发页拆分。为了得到空间,会从既有的充满的页移动一半的行到新页。大量的页拆分会减慢INSERT操作。但是另一方面,充满的数据页允许更快的读取活动,因为数据库引擎可以从更少的数据页中检索更多的行。
PAD_INDEX选项只用来连接FILLFACTOR,它指定在索引的qJ间页级别页打开的自由空间特定的百分比。
这些选项在CREATE INDEX和ALTER I NDEX命令的WITH子句中设置。语法如下:
WITH (PAD_ INDEX=(ON | OFF)
| FILLFACTOR=fillfactor)
例如,使用填充因子50%并启用PAD_INDEX来删除并重建索引:
USE AdventureWorks
GO
DROP INDEX
HumanResources.TerminationReason.NI_TerminationReason_TerminationReason_DepartmentID
CREATE NONCLUSTERED INDEX NI_TerminationReason_TerminationReason_DepartmentID
ON Humanresources.TerminationReason
(TerminationReason ASC,DepartmentID ASC)
WITH (PAD_INDEX=ON,FILLFACTOR=50)
这个例子中,填充因子配置为50%,为新行保留50%的索引页自由空间。同时也启用了PAD_INDEX,因此中间索引页也将保留一半的自由空间。两个选项都用在了CREATE INDEX中的WITH子句中。
使用FILLFACTOR是读与写之间的一个平衡操作。例如,100%的填充因子可以提升读取的性能,但是会减慢写活动的性能,引发频繁的页拆分,因为数据库引擎为了在数据页巾得到空间必须持续地交换行的位置。太低的填充因了会给行插入带来益处,但它也会减慢读取操作,因为要检索所有需要的行必须访问更多的数据页。经验做法是,为几乎没有数据修改活动的表使用100%填充凶子,低活动的使用80%~90%,中等活动的使用60%~70%,为索引键上的高活动使用50%或更低的百分比。