性能处理-索引碎片
问题:随着业务系统使用时间越来越长,业务数据变多,系统使用越来越慢。
针对这个问题,通常会有多种思路例如 建索引,优化sql语句、优化表结构、以及负载的一些处理。
今天说的项目应用中,经常使用的一种手段:清理索引碎片
随着系统使用时间边长,insert update 操作表 越来越多,表索引 会 产生越来月多 的碎片。
这种情况就影响到了 索引的使用,查询又会变成全表查询。
索引碎片得到清理 通常有以下几种做法:
查询索引碎片 占比较高的表 和 索引
SELECT OBJECT_NAME(ind.OBJECT_ID) AS TableName,
ind.name AS IndexName, indexstats.index_type_desc AS IndexType,
indexstats.avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) indexstats
INNER JOIN sys.indexes ind
ON ind.object_id = indexstats.object_id
AND ind.index_id = indexstats.index_id
WHERE indexstats.avg_fragmentation_in_percent > 50
ORDER BY indexstats.avg_fragmentation_in_percent DESC
清理索引碎片
1、exec sp_updatestats 更新统计信息
2、exec sp_msforeachtable 'DBCC DBREINDEX(''?'')' 全库重建索引
3、DBCC DBREINDEX ('aaaac.WorkFlowTask') 按表重建索引
4、使用sqlserver 工具 直接重建索引