SQL Server 重建索引

找出資料庫中的所有索引:
    
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

留言