Sql-Server

可以在不重建索引的情況下更改特定表的填充因子嗎?

  • October 11, 2017

我一直在探勘,沒有任何運氣。

SQL Server 2008:是否可以調整特定聚集索引/表的填充因子而無需重建整個表?

例如,如果它有 4 億條記錄,我們是否可以調整填充因子並讓 SQL Server 在所有尚未超過該限制的頁面(以及新拆分)上使用新的填充因子,然後調整那些索引維護期間超出限制?

是否可以預先定義在下一次索引維護期間應該建構索引的填充因子?

這不是FILLFACTOR工作方式。CREATE它僅適用於在 a或REBUILD操作期間寫入的頁面。頁面總是在創建或拆分時盡可能多地填充。

根據CREATE INDEX的 MSDN 文件:

FILLFACTOR 設置僅在創建或重建索引時應用。

因此,即使您FILLFACTOR在 a 期間更改了REBUILD(因為您的聚集索引已經存在),也只有現有頁面會使用該值。隨著新頁面的創建和現有頁面的拆分,它們將被填充,就像FILLFACTOR設置為一樣100

或者,換一種說法:重建操作在這裡不是你的問題,因為你永遠不會得到新的和拆分的頁面來使用FILLFACTOR下面的100.

另外:不,不可能“預定義”對FILLFACTOR值的更改,該更改將在下次出現REBUILD. 它只能在操作的WITH子句中指定REBUILD。但是,一旦您在重建期間應用了新值,該新值將被儲存sys.indexes並再次用於後續重建,除非有人指定WITH (FILLFACTOR = x).

或者,再次以另一種方式陳述:

  1. 只有在實際執行 a 時FILLFACTOR才能更改該值(我不認為索引的 a和 re-是“更改”)。REBUILD``DROP``CREATE
  2. FILLFACTORCREATE INDEXand使用ALTER INDEX ... REBUILD(在技術上也是DBCC DBREINDEX,但不應使用它,因為它已被棄用 SQL Server 2005);FILLFACTOR不用於插入或更新行,因為這會破壞首先使用此選項的目的*。*

FILLFACTOR在現有數據頁上保留空間,以便可以使用空間(因此減少了頁面拆分的機會);不允許頁面填充超出該FILLFACTOR值將永久保留該空間無目的,有效地減少數據頁面的大小,這實際上會增加而不是減少獲得頁面拆分的機會。

頁面拆分操作總是將大約 50% 移動到新頁面。

引用自:https://dba.stackexchange.com/questions/172197