重组索引(带统计索引重组时间)

        由于在工作中,系统重组索引耗时太久,排查不出问题的根源,故此手工写了如下代码。

首先,建立如下日志表

        /****** Object:  Table [dbo].[ReorganizeLog]    Script Date: 06/20/2013 16:09:27 ******/

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[ReorganizeLog](
    [PKID] [int] IDENTITY(1,1NOT NULL,
    [Name] [varchar](200NULL,
    [TableName] [varchar](200NULL,
    [BeginTime] [datetime] NULL,
    [EndTime] [datetime] NULL,
    [TimeSpan] [time](7NULL,
 CONSTRAINT [PK_ReorganizeLog] PRIMARY KEY CLUSTERED 
(
    [PKID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ONON [PRIMARY]
ON [PRIMARY]

GO

SET ANSI_PADDING OFF

GO

       接下来,利用游标对所有索引进行遍历,逐个重组,也可以改成逐个重建,用到的自己动手修改

       USE DbName;

GO

DECLARE @indexName varchar(200), @tableName varchar(100);

DECLARE allIndex CURSOR FOR
SELECT  a.name ,
        c.name 
FROM    sysindexes a
        JOIN sysindexkeys b ON a.id = b.id
                               AND a.indid = b.indid
        JOIN sysobjects c ON b.id = c.id
WHERE   a.indid NOT IN ( 0255 )  
 and   c.xtype='U'  
ORDER BY 
        c.name ,
        a.name 

OPEN allIndex;

FETCH NEXT FROM allIndex INTO @indexName@tableName;

WHILE @@FETCH_STATUS = 0
BEGIN

   -- Concatenate and display the current values in the variables.
   PRINT @indexName + ',' +  @tableName
   
   declare @beginTime datetime,@endTime datetime,@timespan time,@sql varchar(1000)
    set @beginTime=GETDATE()
    set @sql='ALTER INDEX '+@indexName+' ON '+@tableName+' REORGANIZE WITH ( LOB_COMPACTION = ON )'
    exec(@sql)
    set @endTime=GETDATE()
    set @timespan=@endTime-@beginTime
    INSERT INTO [YeeGoTemp].[dbo].[ReorganizeLog]([Name],[TableName],[BeginTime],[EndTime],[TimeSpan])
         VALUES(@indexName,@tableName,@beginTime,@endTime,@timespan)
    
   FETCH NEXT FROM allIndex INTO @indexName@tableName;
END

CLOSE allIndex;
DEALLOCATE allIndex;
GO

    通过以上代码即可以实现。

    在此以作备忘之用。

原文地址:https://www.cnblogs.com/cxd4321/p/3146207.html