可以在不重建索引的情況下更改特定表的填充因子嗎?
我一直在探勘,沒有任何運氣。
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)
.或者,再次以另一種方式陳述:
- 只有在實際執行 a 時
FILLFACTOR
才能更改該值(我不認為索引的 a和 re-是“更改”)。REBUILD``DROP``CREATE
- 該
FILLFACTOR
值僅由CREATE INDEX
and使用ALTER INDEX ... REBUILD
(在技術上也是DBCC DBREINDEX
,但不應使用它,因為它已被棄用 SQL Server 2005);FILLFACTOR
不用於插入或更新行,因為這會破壞首先使用此選項的目的*。*
FILLFACTOR
在現有數據頁上保留空間,以便可以使用空間(因此減少了頁面拆分的機會);不允許頁面填充超出該FILLFACTOR
值將永久保留該空間無目的,有效地減少數據頁面的大小,這實際上會增加而不是減少獲得頁面拆分的機會。頁面拆分操作總是將大約 50% 移動到新頁面。