システムテーブルにクエリを実行して、クラスター化されていないすべてのインデックスをキャプチャし、無効にしてから完了時に再構築するために使用するスクリプトがあります。以下はStandardEditionで使用するためのものです。エンタープライズを使用している場合は、ONLINE
を追加します。 オプション。
無効にする
DECLARE @sql AS VARCHAR(MAX);
SET @sql = '';
SELECT
@sql = @sql + 'ALTER INDEX [' + i.name + '] ON [' + o.name + '] DISABLE; '
FROM sys.indexes AS i
JOIN sys.objects AS o ON i.object_id = o.object_id
WHERE i.type_desc = 'NONCLUSTERED'
AND o.type_desc = 'USER_TABLE'
EXEC (@sql)
再構築
DECLARE @sql AS VARCHAR(MAX);
SET @sql = '';
SELECT
@sql = @sql + 'ALTER INDEX [' + i.name + '] ON [' + o.name + '] REBUILD WITH (FILLFACTOR = 80); '
FROM sys.indexes AS i
JOIN sys.objects AS o ON i.object_id = o.object_id
WHERE i.type_desc = 'NONCLUSTERED'
AND o.type_desc = 'USER_TABLE'
EXEC (@sql);
条件に基づいて特定のテーブルを除外/含めることができ、カーソルを回避できるため、この方法は非常にカスタマイズ可能であるため、私はこの方法が好きです。 EXEC
を変更することもできます PRINT
に 実行するコードを確認し、手動で実行します。
テーブルを除外する条件
AND o.name NOT IN ('tblTest','tblTest1');