小编Chr*_*cci的帖子

连续处理时索引碎片

SQL Server 2005

我需要能够在 900M 记录表中连续处理大约 350M 条记录。我用来选择要处理的记录的查询在我处理时变得严重碎片化,我需要停止处理以重建索引。伪数据模型&查询...

/**************************************/
CREATE TABLE [Table] 
(
    [PrimaryKeyId] [INT] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
    [ForeignKeyId] [INT] NOT NULL,
    /* more columns ... */
    [DataType] [CHAR](1) NOT NULL,
    [DataStatus] [DATETIME] NULL,
    [ProcessDate] [DATETIME] NOT NULL,
    [ProcessThreadId] VARCHAR (100) NULL
);

CREATE NONCLUSTERED INDEX [Idx] ON [Table] 
(
    [DataType],
    [DataStatus],
    [ProcessDate],
    [ProcessThreadId]
);
/**************************************/

/**************************************/
WITH cte AS (
    SELECT TOP (@BatchSize) [PrimaryKeyId], [ProcessThreadId]
    FROM [Table] WITH ( ROWLOCK, UPDLOCK, READPAST )
    WHERE [DataType] = …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server fragmentation

10
推荐指数
1
解决办法
335
查看次数