36

データベースでタスクを実行するために DTS を実行しています。最初に、データベース内のすべてのインデックスを無効にし、DTS が作業を終了したら再度有効にする必要があります。

データベース全体のすべてのインデックスを無効にしてから、すべてを再度有効にする方法はありますか?

1 つずつ無効化/有効化する方法を知っています。DTS の手順として、一度にすべてを無効化/有効化する方法を教えてください。

4

7 に答える 7

50

以下のスクリプトを使用してインデックスを無効にすることができます

ALTER INDEX ALL ON [TableName]
DISABLE;

テーブルへの一括挿入を行い、以下のスクリプトを実行します。

ALTER INDEX ALL ON [TableName]
REBUILD;
于 2016-02-18T13:01:55.633 に答える
44

データベース内のすべての非クラスター化インデックスに対して ALTER ステートメントを出力するスクリプトを次に示します。これを簡単に変更して、REBUILD スクリプトとクラスター化インデックス用のスクリプトを出力できます。

select 'ALTER INDEX [' + I.name + '] ON [' + T.name + '] DISABLE' 
from sys.indexes I
inner join sys.tables T on I.object_id = T.object_id
where I.type_desc = 'NONCLUSTERED'
and I.name is not null
于 2013-08-15T10:33:09.337 に答える
3

このスクリプトを使用して、すべてのインデックスを無効にします

-- Disable All Indices
DECLARE @Script NVARCHAR(MAX)
DECLARE curIndices CURSOR FAST_FORWARD READ_ONLY FOR
    SELECT 'ALTER INDEX ' + QUOTENAME(indices.name) + ' ON ' + QUOTENAME(SCHEMA_NAME(tableNames.schema_id))+'.'+ QUOTENAME(tableNames.name) + ' DISABLE'
    FROM
        sys.indexes indices  INNER JOIN 
        sys.tables tableNames ON indices.object_id = tableNames.object_id
    WHERE 
        indices.type_desc = 'NONCLUSTERED' AND 
        indices.name IS NOT NULL AND
        indices.is_disabled = 0;
OPEN curIndices
FETCH NEXT FROM curIndices INTO @Script
WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT @Script
    EXECUTE sp_executesql @Script 

    FETCH NEXT FROM curIndices INTO @Script
END
CLOSE curIndices
DEALLOCATE curIndices

このスクリプトを使用して、すべてのインデックスを再構築 (有効化) します

-- Rebuild All Indices
DECLARE @Script NVARCHAR(MAX)
DECLARE curIndices CURSOR FAST_FORWARD READ_ONLY FOR
    SELECT 'ALTER INDEX ' + QUOTENAME(indices.name) + ' ON ' + QUOTENAME(SCHEMA_NAME(tableNames.schema_id))+'.'+ QUOTENAME(tableNames.name) + ' REBUILD'
    FROM
        sys.indexes indices  INNER JOIN 
        sys.tables tableNames ON indices.object_id = tableNames.object_id
    WHERE 
        indices.type_desc = 'NONCLUSTERED' AND 
        indices.name IS NOT NULL AND
        indices.is_disabled = 1;
OPEN curIndices
FETCH NEXT FROM curIndices INTO @Script
WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT @Script
    EXECUTE sp_executesql @Script 

    FETCH NEXT FROM curIndices INTO @Script
END
CLOSE curIndices
DEALLOCATE curIndices
于 2019-01-28T10:33:20.937 に答える
2

テーブルとインデックスのメタデータを選択するスクリプトを実行する必要があります。次に、次のことができます。

ALTER INDEX indexname ON tablename DISABLE; 

後で同様のスクリプトを実行して再構築できます。

ALTER INDEX indexname ON tablename REBUILD; 

これらを一度に 1 つずつ実行するか、NVARCHAR(MAX) 変数にまとめて 1 つのバッチとして実行することができます。この以前の質問でサンプル コードを確認できます。

すべての非クラスター化インデックスを無効にする

于 2013-08-14T15:47:22.660 に答える