性能处理-索引碎片

问题:随着业务系统使用时间越来越长,业务数据变多,系统使用越来越慢。

针对这个问题,通常会有多种思路例如 建索引,优化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 工具 直接重建索引
 
 
posted @ 2024-06-28 16:06  周捷Jay  阅读(17)  评论(0编辑  收藏  举报