Dav*_*ims 5 sql-server-2008 sql-server clustered-index fill-factor index-maintenance
我一直在四处挖掘,但没有任何运气。
SQL Server 2008:是否可以在不重建整个表的情况下调整特定聚集索引/表的填充因子?
例如,如果它有 4 亿条记录,我们是否可以调整填充因子并让 SQL Server 在所有尚未超过该限制的页面(以及新拆分)上使用新的填充因子,然后调整已超出该限制的页面?索引维护期间超限?
是否可以预先定义在下一次索引维护期间应该构建索引的填充因子?
这不是FILLFACTOR工作方式。它仅适用于在 aCREATE或REBUILD操作期间写入的页面。页面总是在创建或拆分时尽可能多地填充。
根据CREATE INDEX的 MSDN 文档:
FILLFACTOR 设置仅在创建或重建索引时适用。
因此,即使您FILLFACTOR在 a 期间更改了REBUILD(因为您的聚集索引已经存在),也只有现有页面会使用该值。随着新页面的创建和现有页面的拆分,它们将被填充,就像FILLFACTOR被设置为 一样100。
或者,换句话说:重建操作在这里不是你的问题,因为你永远不会得到新的和拆分的页面来使用FILLFACTOR下面的100.
另外:不,不可能“预定义”对FILLFACTOR值的更改,该更改将在下次有REBUILD. 它只能在操作的WITH子句中指定REBUILD。但是,一旦您在重建期间应用了新值,该新值将被存储sys.indexes并再次用于后续重建,除非有人指定WITH (FILLFACTOR = x).
或者,再次以另一种方式表示:
FILLFACTOR才能更改该值(我不认为索引的a和 re-是“更改”)。REBUILDDROPCREATE该FILLFACTOR值仅由CREATE INDEXand 使用ALTER INDEX ... REBUILD(从技术上讲也是如此DBCC DBREINDEX,但不应使用该值,因为它已从SQL Server 2005开始弃用);FILLFACTOR是不使用作为行被插入或更新作为会破坏具有在第一位置该选项的目的。
FILLFACTOR在现有数据页上保留空间,以便可以使用该空间(从而减少页面拆分的机会);不允许页面填充超出该FILLFACTOR值将永久保留该空间,从而有效地减少数据页面的大小,这实际上会增加而不是减少页面拆分的机会。
页面拆分操作总是将大约 50% 移动到新页面。