1,查看索引碎片占用状况

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 > 5  ORDER BY 1,2 DESC 

---说明:为了获得最佳性能,avg_fragmentation_in_percent的值应尽可能接近零。

2,按照表批量重建索引

--USE TestDb
--GO
DECLARE @table_name VARCHAR(200)
--查询数据库里的所有表名
DECLARE cursor_reindex CURSOR FAST_FORWARD READ_ONLY FOR SELECT  distinct OBJECT_NAME(ind.OBJECT_ID) AS TableName 
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 > 5 
and ind.name is not null
 
--使用游标遍历表列表
OPEN cursor_reindex
FETCH NEXT FROM cursor_reindex INTO @table_name
WHILE @@FETCH_STATUS = 0
BEGIN
    --开始重建表索引
	DBCC DBREINDEX(@table_name)
	--DBCC DBREINDEX(@table_name, '', 90)
 
    FETCH NEXT FROM cursor_reindex INTO @table_name
END
CLOSE cursor_reindex
DEALLOCATE cursor_reindex

欢迎转载,请注明来自白菜卖故事>>本文地址:http://www.bcmgs.com/797

0 还没人赞过...