填滿因數

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

填滿因數值是 1 到 100 之間的百分比,而整個伺服器的預設值 0 則表示分葉層級頁面的容量填滿。

[!附註]

填滿因數值 0 和 100 在各方面都是一樣的。

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

重要注意事項重要事項

填滿因數設定只會在建立或重建索引時套用。SQL Server Database Engine 不會動態地保持各分頁中空白空間的指定百分比。如果嘗試在資料頁上保留額外的空間,則會破壞原先使用填滿因數的目的,因為 Database Engine 必須執行頁面分割,以便在輸入資料時,維持填滿因數所指定的每個頁面的可用空間比例。

效能考量

頁面分割

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

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

將資料加入資料表的結尾

如果新的資料在資料表內平均分配,則非零的填滿因數值 (0 或 100 以外) 對於效能將很有幫助。但是,如果將所有資料加入資料表的結尾,索引頁面中的空白處將不會填滿。例如,如果索引鍵資料行為 IDENTITY 資料行,新資料列的索引鍵一定會增加,而且在邏輯上會將索引資料列加入索引的結尾。如果現有的資料列將以增加資料列大小的資料進行更新,請使用小於 100 的填滿因數。每個頁面上的額外位元組將有助於減少資料列中額外長度所導致的頁面分割。