Answers:
填充因子仅在创建或重建索引时才起作用。 这是在这些操作期间填充的叶级页面的索引的消耗量。(请参见下面的注释,以获取有关受影响页面级别的更多说明)
当有DML命令(INSERT
,UPDATE
和/或DELETE
)对数据进行操作时,它将发生在相应的受影响索引上。换句话说,如果您的页面填充了20%,并且在该页面中插入了数据,则该页面将包含20%以上的数据(例如,假设35%)。再次插入,现在页面已填充64%。重建索引,叶子级页面现在将相对包含您指定的空间百分比(或隐式为服务器的默认值)。
(请注意,当你没有指定PAD_INDEX
是ON
,填充因子只适用于叶级页。但是当你设置PAD_INDEX = ON
,填充因子会考虑到该指数的中间级页。 默认为OFF
)
调整填充因子的原因(而不是使用默认的100/0)是为了在插入或更新数据时最大程度地减少页面拆分。但是请记住,没有什么是免费的。填充系数越低,通常将占用更多的空间数据。如果为索引保留80%的可用页面空间,它们将消耗相对大量的磁盘空间,这可能导致更多读取。
据我了解,插入数据后,页面中大约有20%的数据。但是,当数据更新时,它将扩展到索引的20%以上,直到填满并生成分页,对吗?
插入数据后,它将插入相应页面的相应索引中。 这很可能会导致页面消耗量高于填充因子。
将新数据添加到完整索引页时,将发生页面拆分。 然后,SQL Server将拆分页面,并将整个页面的大约一半数据放入新页面。同样,填充因子在这里不起作用。
降低填充因子的合理原因是要最大程度地减少页面拆分,从而使索引页面碎片最小化。