インデックスと制約の有効化Enable Indexes and Constraints

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database

このトピックでは、無効にされている SQL Server 2019 (15.x)SQL Server 2019 (15.x) のインデックスを、 SQL Server Management StudioSQL Server Management Studio または Transact-SQLTransact-SQLを使用して有効にする方法を説明します。This topic describes how to enable a disabled index in SQL Server 2019 (15.x)SQL Server 2019 (15.x) by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. 無効にされたインデックスは、再構築されるか削除されるまで無効な状態のままとなります。After an index is disabled, it remains in a disabled state until it is rebuilt or dropped

このトピックの内容In This Topic

はじめにBefore You Begin

制限事項と制約事項Limitations and Restrictions

  • インデックスの再構築後、インデックスを無効にしたために無効になった制約を手動で有効にする必要があります。After rebuilding the index, any constraints that were disabled because of disabling the index must be manually enabled. PRIMARY KEY 制約と UNIQUE 制約については、関連するインデックスを再構築すると有効になります。PRIMARY KEY and UNIQUE constraints are enabled by rebuilding the associated index. このインデックスを再構築しないと、PRIMARY KEY 制約や UNIQUE 制約を参照する FOREIGN KEY 制約を有効にすることはできません。This index must be rebuilt (enabled) before you can enable FOREIGN KEY constraints that reference the PRIMARY KEY or UNIQUE constraint. FOREIGN KEY 制約を有効にするには、ALTER TABLE CHECK CONSTRAINT ステートメントを使用します。FOREIGN KEY constraints are enabled by using the ALTER TABLE CHECK CONSTRAINT statement.

  • ONLINE オプションが ON に設定されている場合、無効化されたクラスター化インデックスを再構築することはできません。Rebuilding a disabled clustered index cannot be performed when the ONLINE option is set to ON.

  • クラスター化インデックスが無効または有効で、非クラスター化インデックスが無効になっている場合、クラスター化インデックスの操作により、無効化された非クラスター化インデックスには、次のような影響があります。When the clustered index is disabled or enabled and the nonclustered index is disabled, the clustered index action has the following results on the disabled nonclustered index.

    クラスター化インデックスの操作Clustered Index Action 無効化された非クラスター化インデックスDisabled Nonclustered Index ...
    ALTER INDEX REBUILDALTER INDEX REBUILD. 無効化されたままです。Remains disabled.
    ALTER INDEX ALL REBUILDALTER INDEX ALL REBUILD. 再構築され、有効になります。Is rebuilt and enabled.
    DROP INDEXDROP INDEX. 無効化されたままです。Remains disabled.
    CREATE INDEX WITH DROP_EXISTINGCREATE INDEX WITH DROP_EXISTING. 無効化されたままです。Remains disabled.

    新しいクラスター化インデックスの作成操作による影響は ALTER INDEX ALL REBUILD と同じです。Creating a new clustered index, behaves the same as ALTER INDEX ALL REBUILD.

  • クラスター化インデックスに関連付けられらている非クラスター化インデックスに対して実行できる操作は、これらのインデックスの状態が無効であるか有効であるかによって異なります。Allowed actions on nonclustered indexes associated with a clustered index depend on the state, whether disabled or enabled, of both index types. 次の表に、非クラスター化インデックスに対して実行できる操作を示します。The following table summarizes the allowed actions on nonclustered indexes.

    非クラスター化インデックスの操作Nonclustered Index Action クラスター化インデックスと非クラスター化インデックスの両方が無効な場合When both the clustered and nonclustered indexes are disabled. クラスター化インデックスが有効で、非クラスター化インデックスが無効または有効な場合When the clustered index is enabled and the nonclustered index is in either state.
    ALTER INDEX REBUILDALTER INDEX REBUILD. 操作は失敗します。The action fails. 操作は成功します。The action succeeds.
    DROP INDEXDROP INDEX. 操作は成功します。The action succeeds. 操作は成功します。The action succeeds.
    CREATE INDEX WITH DROP_EXISTINGCREATE INDEX WITH DROP_EXISTING. 操作は失敗します。The action fails. 操作は成功します。The action succeeds.
  • 無効で圧縮済みの非クラスター化インデックスを再構築すると、data_compression は既定で 'none' に設定されます。つまり、インデックスは解凍されます。When rebuilding disabled compressed nonclustered indexes, data_compression will default to 'none', meaning that indexes will be uncompressed. これは、非クラスター化インデックスが無効になると、圧縮設定のメタデータが失われるためです。This is due to compression settings metadata is lost when nonclustered indexes are disabled. これを回避するには、再構築ステートメントに明示的なデータ圧縮を指定する必要があります。To work around this you must specify explicit data compression in rebuild statement.

セキュリティSecurity

PermissionsPermissions

テーブルまたはビューに対する ALTER 権限が必要です。Requires ALTER permission on the table or view. DBCC DBREINDEX を使用している場合、ユーザーはテーブルを所有しているか、sysadmin 固定サーバー ロールのメンバーであるか、db_ddladmin 固定データベース ロールおよび db_owner 固定データベース ロールのメンバーである必要があります。If using DBCC DBREINDEX, user must either own the table; or be a member of the sysadmin fixed server role; or the db_ddladmin and db_owner fixed database roles.

SQL Server Management Studio の使用Using SQL Server Management Studio

無効なインデックスを有効にするにはTo enable a disabled index

  1. オブジェクト エクスプローラーで、インデックスを有効にするテーブルが格納されているデータベースをプラス記号をクリックして展開します。In Object Explorer, click the plus sign to expand the database that contains the table on which you want to enable an index.

  2. プラス記号をクリックして [テーブル] フォルダーを展開します。Click the plus sign to expand the Tables folder.

  3. プラス記号をクリックして、インデックスを有効にするテーブルを展開します。Click the plus sign to expand the table on which you want to enable an index.

  4. プラス記号をクリックして [インデックス] フォルダーを展開します。Click the plus sign to expand the Indexes folder.

  5. 有効にするインデックスを右クリックし、 [再構築] を選択します。Right-click the index you want to enable and select Rebuild.

  6. [インデックスの再構築] ダイアログ ボックスで、 [再構築するインデックス] グリッドに目的のインデックスが表示されていることを確認し、 [OK] をクリックします。In the Rebuild Indexes dialog box, verify that the correct index is in the Indexes to rebuild grid and click OK.

テーブルのすべてのインデックスを有効にするにはTo enable all indexes on a table

  1. オブジェクト エクスプローラーで、インデックスを有効にするテーブルが格納されているデータベースをプラス記号をクリックして展開します。In Object Explorer, click the plus sign to expand the database that contains the table on which you want to enable the indexes.

  2. プラス記号をクリックして [テーブル] フォルダーを展開します。Click the plus sign to expand the Tables folder.

  3. プラス記号をクリックして、インデックスを有効にするテーブルを展開します。Click the plus sign to expand the table on which you want to enable the indexes.

  4. [インデックス] フォルダーを右クリックし、 [すべて再構築] を選択します。Right-click the Indexes folder and select Rebuild All.

  5. [インデックスの再構築] ダイアログ ボックスで、 [再構築するインデックス] グリッドに目的のインデックスが表示されていることを確認し、 [OK] をクリックします。In the Rebuild Indexes dialog box, verify that the correct indexes are in the Indexes to rebuild grid and click OK. [再構築するインデックス] グリッドからインデックスを削除するには、インデックスを選択し、Del キーを押します。To remove an index from the Indexes to rebuild grid, select the index and then press the Delete key.

[インデックスの再構築] ダイアログ ボックスには、次の情報が表示されます。The following information is available in the Rebuild Indexes dialog box:

Transact-SQL の使用Using Transact-SQL

無効にされたインデックスを ALTER INDEX を使用して有効にするにはTo enable a disabled index using ALTER INDEX

  1. オブジェクト エクスプローラー で、 データベース エンジンDatabase Engineのインスタンスに接続します。In Object Explorer, connect to an instance of データベース エンジンDatabase Engine.

  2. [標準] ツール バーの [新しいクエリ] をクリックします。On the Standard bar, click New Query.

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;  
    GO  
    -- Enables the IX_Employee_OrganizationLevel_OrganizationNode index  
    -- on the HumanResources.Employee table.  
    
    ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
    REBUILD;   
    GO  
    

無効にされたインデックスを CREATE INDEX を使用して有効にするにはTo enable a disabled index using CREATE INDEX

  1. オブジェクト エクスプローラー で、 データベース エンジンDatabase Engineのインスタンスに接続します。In Object Explorer, connect to an instance of データベース エンジンDatabase Engine.

  2. [標準] ツール バーの [新しいクエリ] をクリックします。On the Standard bar, click New Query.

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;  
    GO  
    -- re-creates the IX_Employee_OrganizationLevel_OrganizationNode index  
    -- on the HumanResources.Employee table  
    -- using the OrganizationLevel and OrganizationNode columns  
    -- and then deletes the existing IX_Employee_OrganizationLevel_OrganizationNode index  
    CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
       (OrganizationLevel, OrganizationNode)  
    WITH (DROP_EXISTING = ON);  
    GO  
    

無効にされたインデックスを DBCC DBREINDEX を使用して有効にするにはTo enable a disabled index using DBCC DBREINDEX

  1. オブジェクト エクスプローラー で、 データベース エンジンDatabase Engineのインスタンスに接続します。In Object Explorer, connect to an instance of データベース エンジンDatabase Engine.

  2. [標準] ツール バーの [新しいクエリ] をクリックします。On the Standard bar, click New Query.

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;   
    GO  
    -- enables the IX_Employee_OrganizationLevel_OrganizationNode index  
    -- on the HumanResources.Employee table  
    DBCC DBREINDEX ("HumanResources.Employee", IX_Employee_OrganizationLevel_OrganizationNode);  
    GO  
    

テーブル上のすべてのインデックスを ALTER INDEX を使用して有効にするにはTo enable all indexes on a table using ALTER INDEX

  1. オブジェクト エクスプローラー で、 データベース エンジンDatabase Engineのインスタンスに接続します。In Object Explorer, connect to an instance of データベース エンジンDatabase Engine.

  2. [標準] ツール バーの [新しいクエリ] をクリックします。On the Standard bar, click New Query.

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;  
    GO  
    -- enables all indexes  
    -- on the HumanResources.Employee table  
    ALTER INDEX ALL ON HumanResources.Employee  
    REBUILD;  
    GO  
    

テーブル上のすべてのインデックスを DBCC DBREINDEX を使用して有効にするにはTo enable all indexes on a table using DBCC DBREINDEX

  1. オブジェクト エクスプローラー で、 データベース エンジンDatabase Engineのインスタンスに接続します。In Object Explorer, connect to an instance of データベース エンジンDatabase Engine.

  2. [標準] ツール バーの [新しいクエリ] をクリックします。On the Standard bar, click New Query.

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;   
    GO  
    -- enables all indexes  
    -- on the HumanResources.Employee table  
    DBCC DBREINDEX ("HumanResources.Employee", " ");  
    GO  
    

詳細については、「ALTER INDEX (Transact-SQL)」、「CREATE INDEX (Transact-SQL)」、および「DBCC DBREINDEX (Transact-SQL)」を参照してください。For more information, see ALTER INDEX (Transact-SQL), CREATE INDEX (Transact-SQL), and DBCC DBREINDEX (Transact-SQL).