填滿因數

提供填滿因數的用意,是為了微調索引資料的儲存與效能。建立或重建索引時,填滿因數值會決定要在每個分葉層級分頁上填滿資料的空間百分比,進而保留某個百分比的可用空間以備未來成長使用。例如,如果指定填滿因數值 80,表示每個分葉層級的分頁將有百分之 20 的空間保留空白,在基礎資料表中加入資料時,將有空間可備索引擴充之用。空白空間會保留在每個頁面的索引資料列之間而非頁面的結尾。

填滿因數值是從 1 到 100 的百分比。在大多數情況下,伺服器通用的預設值 0 是最佳的選擇。當填滿因數設為定 0 時,分葉層級會完全填滿。

ms177459.note(zh-tw,SQL.90).gif附註:
填滿因數值 0 和 100 在各方面都是一樣的。

您可以使用 CREATE INDEX 或 ALTER INDEX 陳述式,為個別索引設定填滿因數值。若要修改伺服器通用的預設值,請使用 sp_configure 系統預存程序。若要檢視一或多個索引的填滿因數值,請使用 sys.indexes 目錄檢視。

ms177459.note(zh-tw,SQL.90).gif重要事項:
填滿因數設定只會在建立或重建索引時套用。SQL Server 2005 Database Engine 不會動態地保持各分頁中空白空間的指定百分比。如果想在資料頁上保留額外的空間,會破壞原先使用填滿因數的目的,因為 Database Engine 必須執行頁面分割,以便在輸入資料時,維持填滿因數所指定的每個頁面的可用空間比例。

效能考量

頁面分割

選擇正確的填滿因數值,可以減少可能的分頁分割,因為當基礎資料表中加入資料時,將有足夠的空間來進行索引擴充。

將新的資料列加入全文檢索頁時,Database Engine 會將幾乎一半的資料列移到新的分頁,以留出空間給新的資料列。這個重組動作稱為分頁分割。分頁分割可留出空間給新的記錄,但是執行時需要時間,而且是一項耗用大量資源的作業。此外,它也可能會造成資料片段過多,因而增加 I/O 作業。如果分頁分割次數過於頻繁,可以使用新的或現有的填滿因數值重建索引,藉以重新分配資料。如需詳細資訊,請參閱<重新組織和重建索引>。

雖然 0 以外的較低填滿函數值能夠減少索引成長時進行分頁分割的需求,但是索引將需要更多的儲存空間,而且可能會降低讀取效能。即使對於會大量執行插入和更新作業的應用程式而言,讀取資料庫的次數通常比寫入資料庫的次數還要高,因數為 5 比 10。因此,指定預設值以外的填滿因數,將可能以與填滿因數設定呈反比的數量,降低資料庫的讀取效能。例如,一個 50 的填滿因數值,可能會使資料庫的讀取效能降低兩倍。讀取效能降低是因為索引包含更多的分頁,造成擷取資料所需的磁碟 IO 作業增加所致。

將資料加入至資料表的結尾

如果新資料平均分散在整個資料表中,非零填滿因數可能會提升效能。不過,如果所有資料都加入至資料表的結尾,系統就不會填滿空白空間。例如,如果索引鍵資料行是 IDENTITY 資料行,新資料列的索引鍵一定會增加,而且這些資料列會以邏輯方式加入至資料表的結尾。在這種情況下,頁面分割將不會導致效能降低。您應該使用預設的填滿因數 0 或指定填滿因數 100,以便填滿分葉層級。

請參閱

概念

建立索引 (Database Engine)
fill factor 選項

其他資源

ALTER INDEX (Transact-SQL)
CREATE INDEX (Transact-SQL)
sys.indexes (Transact-SQL)
sp_configure (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助