两种解决方案:一种简单,一种更高级。
简介
根据问题的严重程度,您可以使用两种解决方案
替换成自己的值,如下:
- 将
XXXMYINDEXXXX 替换为索引名称。
- 将
XXXMYTABLEXXX 替换为表的名称。
- 将
XXXDATABASENAMEXXX 替换为数据库名称。
解决方案 1. 索引
在离线模式下重建表的所有索引
ALTER INDEX ALL ON XXXMYTABLEXXX REBUILD
在离线模式下为表重建一个指定索引
ALTER INDEX XXXMYINDEXXXX ON XXXMYTABLEXXX REBUILD
解决方案 2. 碎片化
在经常添加和删除条目的表中,碎片化是一个问题。
检查碎片百分比
SELECT
ips.[index_id] ,
idx.[name] ,
ips.[avg_fragmentation_in_percent]
FROM
sys.dm_db_index_physical_stats(DB_ID(N'XXXMYDATABASEXXX'), OBJECT_ID(N'XXXMYTABLEXXX'), NULL, NULL, NULL) AS [ips]
INNER JOIN sys.indexes AS [idx] ON [ips].[object_id] = [idx].[object_id] AND [ips].[index_id] = [idx].[index_id]
碎片化 5..30%
如果碎片值大于 5%,但小于 30%,则值得重新组织索引。
重新组织表的所有索引
ALTER INDEX ALL ON XXXMYTABLEXXX REORGANIZE
为表重新组织一个指定索引
ALTER INDEX XXXMYINDEXXXX ON XXXMYTABLEXXX REORGANIZE
碎片化 30%+
如果碎片值为 30% 或更大,则值得在联机模式下重建索引。
在线模式下为表重建所有索引
ALTER INDEX ALL ON XXXMYTABLEXXX REBUILD WITH (ONLINE = ON)
在线模式下为表重建一个指定索引
ALTER INDEX XXXMYINDEXXXX ON XXXMYTABLEXXX REBUILD WITH (ONLINE = ON)