【SQLServer】FillFactorの設定と確認
FillFacotrとは
ページ内のどの程度の領域をデータ格納領域として使うかの設定。
更新を見越して、ある程度のバッファを取っておくともいえる。
InsertやUpdateが頻繁にかかるテーブルのインデックスは、この設定を低くすることで、断片化が起きにくくなる。
FillFactorの設定
インデックス再構築のクエリにオプションとして設定すればOK。
1 2 |
--この例ではFillFactorを80%に設定している ALTER INDEX [インデックス名] ON [DB名] REBUILD PARTITION = ALL WITH ( FILLFACTOR = 80 ) |
FillFactorの設定値の確認
全てのインデックスのFillFactorを確認するSQL
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SELECT DB_NAME() AS Database_Name , sc.name AS Schema_Name , o.name AS Table_Name , o.type_desc , i.name AS Index_Name , i.type_desc AS Index_Type , i.fill_factor FROM sys.indexes i INNER JOIN sys.objects o ON i.object_id = o.object_id INNER JOIN sys.schemas sc ON o.schema_id = sc.schema_id WHERE i.name IS NOT NULL AND o.type = 'U' ORDER BY i.fill_factor DESC, o.name |
設定されているもののみ表示(0または100のものは除外する)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
SELECT DB_NAME() AS Database_Name , sc.name AS Schema_Name , o.name AS Table_Name , o.type_desc , i.name AS Index_Name , i.type_desc AS Index_Type , i.fill_factor FROM sys.indexes i INNER JOIN sys.objects o ON i.object_id = o.object_id INNER JOIN sys.schemas sc ON o.schema_id = sc.schema_id WHERE i.name IS NOT NULL AND o.type = 'U' AND i.fill_factor not in (0, 100) ORDER BY i.fill_factor DESC, o.name |