sql >> データベース >  >> RDS >> Sqlserver

現在のインデックスを自動的に削除して再作成する

    システムテーブルにクエリを実行して、クラスター化されていないすべてのインデックスをキャプチャし、無効にしてから完了時に再構築するために使用するスクリプトがあります。以下は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');
    


    1. PHPで実行されるMySQLファイル内でPHPセッション変数を使用しますか?

    2. php配列の表示とランダム化

    3. 2つのSELECTステートメントとUNIONとMySQL-PHPの他のすべてのパフォーマンス/効率

    4. SQL Server 2008でこの計算列を変更するにはどうすればよいですか?