sql server 設定index FillFactor(填滿因素)




SQL SERVER儲存資料的單位為Page(頁面),在建立Index時,SQL SERVER預設會在Page填滿資料(FillFactor為0或100),此時如果新增資料時,因為Page已滿,Index所以必須使用另一個Page儲存資料,在一連串的異動資料後,會導致資料散佈在各Page上,當SQL SEVER要讀取Index時,因為資料散佈在Page而使效能低落。為了避免因為異動資料而引起的效能低落,在建立Index時可以指定Page保留一定的空間。
當Page有保留一定空間(假設FillFactor為80)時,新增的會插入現在的Page的預留空間,如此資料就不會分散。
如果FillFactor設定太小(如30),會造成建立Index時,每一個Page都只用30%的空間,這樣同樣會有資料散佈的問題以及會浪費儲存空間。
設定FillFactor可以搭配PAD_INDEX,該選項的為FillFactor的設定也套用在Index的中間(intermediate-level)。

使用 fill factor 選項,主要指定 Microsoft SQL Server 在使用現有的資料建立新索引時,應該在每一頁填滿多少空間。填滿因數會影響效能,因為當頁面填滿之後,SQL Server 就必須花費時間進行頁面的分割。

PS:
A、填滿因數的預設值為 0;有效值介於 0 到 100 之間。當 FILL FACTOR 設定為 0 或 100 時,分葉層級會完全填滿。
B、填滿因數只會用於建立或重建索引時。所有分頁都不會保持在特定的填滿程度。

--檢視資料庫中所有的index
SELECT
DB_NAME() DBName,
OBJECT_NAME([object_id]) AS TableName,
name AS IndexName,
is_primary_key,
is_unique,
type_desc,
fill_factor,
has_filter,
filter_definition
FROM SYS.INDEXES
WHERE  OBJECT_NAME([object_id]) IN
(SELECT Table_Name FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE)


使用SQL MANAGER-->[管理索引和索引鍵]如下圖



留言

這個網誌中的熱門文章

java 數字轉字串 字串轉數字

MS sqlServer資料庫移轉至MySQL-->利用MySQL WorkBench

sql server 15023 error [SQL SERVER問題: 使用者、組或角色 '*****' 在當前資料庫中已存在]