重建分区表聚集索引

Kar*_*lvi 2 sql-server partitioning sql-server-2012

我需要知道如何重建分区表聚集索引,表大小约为 270 GB,有 126 个分区。

另外,我想在生产环境中执行它,那么最快的方法是什么以及如何执行。

这是一个非常关键的改变,需要完成,因此任何帮助或建议将不胜感激。

Dan*_*man 6

分区可以单独重建。这允许您中断重建并保留已完成的工作。重建可以在先前完成的分区号之后恢复。下面是此技术的一个示例,其中 @PartitonNumber 值可以在重新启动场景中更改。

DECLARE
      @PartitionNumber int = 1 --specify start partition number
    , @EndPartitionNumber int;

--get last partition number
SELECT @EndPartitionNumber = MAX(p.partition_number)
FROM sys.indexes AS i
JOIN sys.partitions AS p ON
    p.object_id = i.object_id
    AND p.index_id = i.index_id
WHERE
    i.object_id = OBJECT_ID(N'dbo.YourTable', 'U')
    AND i.name = N'YourIndexName'; 

--rebuild each partition individually    
WHILE @PartitionNumber <= @EndPartitionNumber
BEGIN

    RAISERROR('Rebuilding partition %d', 0, 0, @PartitionNumber) WITH NOWAIT;

    ALTER INDEX [YourIndexName]
        ON [dbo].[YourTable]
        REBUILD Partition = @PartitionNumber;
        --WITH(ONLINE=ON); --specify desired online mode in SQL 2014 and later

    RAISERROR('Partition %d rebuild completed', 0, 0, @PartitionNumber) WITH NOWAIT;

    SET @PartitionNumber += 1;

END;
GO
Run Code Online (Sandbox Code Playgroud)