Sqlserver2005及以上索引重置代码

频繁写入操作,导致索引冗余混乱。特保存一下索引重置代码

use DB_XX
go

DECLARE @objectid int
DECLARE @indexid int
DECLARE @partitioncount bigint
DECLARE @schemaname nvarchar(130)
DECLARE @objectname nvarchar(130)
DECLARE @indexname nvarchar(130)
DECLARE @partitionnum bigint
DECLARE @partitions bigint
DECLARE @frag float
DECLARE @command nvarchar(4000) 

SELECT [object_id] AS objectid, index_id AS indexid, partition_number AS partitionnum, avg_fragmentation_in_percent AS frag 
INTO #IndexInfo 
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED') 
WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0

DECLARE partitions CURSOR FOR SELECT * FROM #IndexInfo
OPEN partitions
WHILE (1=1) 
BEGIN
    FETCH NEXT FROM partitions INTO @objectid, @indexid, @partitionnum, @frag
    IF @@FETCH_STATUS < 0 
		BREAK
		
	SELECT @objectname = QUOTENAME(o.name), @schemaname = QUOTENAME(s.name) 
	FROM sys.objects AS o 
	JOIN sys.schemas as s ON s.schema_id = o.schema_id 
	WHERE o.object_id = @objectid

    SELECT @indexname = QUOTENAME(name)
    FROM sys.indexes 
    WHERE  object_id = @objectid AND index_id = @indexid
     
    SELECT @partitioncount = count (*) 
    FROM sys.partitions 
    WHERE object_id = @objectid AND index_id = @indexid

	-- 30 is an arbitrary decision point at which to switch between reorganizing and rebuilding. 
    IF @frag < 30.0 
        SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REORGANIZE'
    IF @frag >= 30.0 
        SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD'
    IF @partitioncount > 1 
        SET @command = @command + N' PARTITION=' + CAST(@partitionnum AS nvarchar(10))

    EXEC (@command) 
END

CLOSE partitions; 
DEALLOCATE partitions; 

DROP TABLE #IndexInfo; 

GO


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值