填滿因數
提供填滿因數的用意,是為了微調索引資料的儲存與效能。建立或重建索引時,填滿因數值會決定要在每個分葉層級分頁上填滿資料的空間百分比,進而保留某個百分比的可用空間以備未來成長使用。例如,如果指定填滿因數值 80,表示每個分葉層級的分頁將有百分之 20 的空間保留空白,在基礎資料表中加入資料時,將有空間可備索引擴充之用。空白空間會保留在每個頁面的索引資料列之間而非頁面的結尾。
填滿因數值是從 1 到 100 的百分比。在大多數情況下,伺服器通用的預設值 0 是最佳的選擇。當填滿因數設為定 0 時,分葉層級會完全填滿。
附註: |
---|
填滿因數值 0 和 100 在各方面都是一樣的。 |
您可以使用 CREATE INDEX 或 ALTER INDEX 陳述式,為個別索引設定填滿因數值。若要修改伺服器通用的預設值,請使用 sp_configure 系統預存程序。若要檢視一或多個索引的填滿因數值,請使用 sys.indexes 目錄檢視。
重要事項: |
---|
填滿因數設定只會在建立或重建索引時套用。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)