设置填充因子是否重要?我认为是。很多资料都提到,缺省的填充因子取值一般情况下是较优的,而且建议除非你很清楚在做什么,否则不要更改填充因子取值。就像数据库管理员常识那样,除非你理解你正在做什么,否则不更改任何设置是明智的。说得虽然没错,但是到底该如何确定填充因子取值,以及知道该做什么?我试图找到一个确定取值的简单公式。你猜结果如何?我找不到。
为了理解填充因子,有必要好好理解聚集和非聚集索引,堆表(heap tables),扩展盘区(extents),页(pages),页拆分(page splits),以及DBCC SHOWCONTIG命令结果。如果你不熟悉这些概念,我建议参考SQL Server联机帮助,或者相关背景的资料。理解SQL Server物理文件结构的组成是十分重要的。
基本上填充因子是指当索引被创建和重建时,指定存储记录的叶节点页空间的百分比。我们也许以前都看过这个定义,但是该定义中有一个常被人忽视的关键点--“当索引被创建和重建时”。一旦页拆分发生,经过拆分后生成的两个新页上,原来设置的填充因子取值就失效了。当索引创建时,如果指定填充因子为80,意味着每个页只使用80%的空间。在某个页填入数据后,例如添加新记录或者修改记录,页拆分为两个新页,并且填充空间均为50%。原来那个填充因子对这两个新页失效。如果你没有重建索引,那么除非数据量很小,或者数据更新很小,否则很可能会产生很多页拆分,并且最早的填充因子会失效。
还是那个问题,我们该设置填充因子为多少呢?取值低,则需要更多的页来存储数据,因而读取范围大;这会影响性能。取值高,则会造成大量的