找出資料庫中的所有索引:
其中 fill_factor 代表的是「填充係數」, fill_factor 的數值為 0 ~ 100, 0 和 100 都代表完全填滿, 1~99 則代表 1%~99%。一般我們會設定在 80% 左右,預留一些空間給未來要新增的資料,這樣可以避免資料分裂/資料碎片化,缺點就是會多占用一些空間。
重建指定索引:
重建指定索引並指定填充係數為 80%:
重建指定資料表的全部索引:
參考資料:
Microsoft.Learn - Optimize index maintenance to improve query performance and reduce resource consumption
SELECT t.name AS TableName, -- 資料表名稱
i.name AS IndexName, -- 索引名稱
i.type_desc AS IndexType, -- 索引類型
i.is_unique, -- 是否為唯一索引 (1 表示唯一)
i.is_primary_key, -- 是否為主鍵索引 (1 表示主鍵)
i.fill_factor, -- 填充比例 (0 和 100 都代表完全填滿)
i.is_disabled -- 索引是否已禁用 (1 表示已禁用)
FROM sys.indexes i
INNER JOIN
sys.tables t ON i.object_id = t.object_id
WHERE i.type > 0 -- 排除無索引的資料表
ORDER BY t.name, -- 按資料表名稱排序
i.name; -- 按索引名稱排序
其中 fill_factor 代表的是「填充係數」, fill_factor 的數值為 0 ~ 100, 0 和 100 都代表完全填滿, 1~99 則代表 1%~99%。一般我們會設定在 80% 左右,預留一些空間給未來要新增的資料,這樣可以避免資料分裂/資料碎片化,缺點就是會多占用一些空間。
重建指定索引:
ALTER INDEX [索引名稱] ON [資料表名稱]
REORGANIZE;
重建指定索引並指定填充係數為 80%:
ALTER INDEX [索引名稱] ON [資料表名稱]
REBUILD WITH (FILLFACTOR = 80);
重建指定資料表的全部索引:
ALTER INDEX ALL ON [資料表名稱]
REORGANIZE;
參考資料:
Microsoft.Learn - Optimize index maintenance to improve query performance and reduce resource consumption
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com