オンラインでのインデックス操作の実行Perform Index Operations Online

適用対象: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 ServerSQL ServerSQL Server Management StudioSQL Server Management Studio または Transact-SQLTransact-SQLを使用して、インデックスをオンラインで作成、再構築、または削除する方法について説明します。This topic describes how to create, rebuild, or drop indexes online in SQL ServerSQL Server by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. ONLINE オプションにより、このようなインデックス操作中に、基になるテーブルやクラスター化インデックス データ、および関連付けられた任意の非クラスター化インデックスへの同時ユーザー アクセスが可能になります。The ONLINE option allows concurrent user access to the underlying table or clustered index data and any associated nonclustered indexes during these index operations. たとえば、あるユーザーがクラスター化インデックスを再構築している最中に、そのユーザーと他のユーザーが基になるデータの更新やクエリを続行できます。For example, while a clustered index is being rebuilt by one user, that user and others can continue to update and query the underlying data. クラスター化インデックスの構築や再構築などのデータ定義言語 (DDL) 操作をオフラインで実行するときは、これらの操作により、基になるデータや関連付けられたインデックスに排他ロックがかけられます。When you perform data definition language (DDL) operations offline, such as building or rebuilding a clustered index; these operations hold exclusive locks on the underlying data and associated indexes. このため、インデックス操作が完了するまで、基になるデータの変更やクエリを実行できません。This prevents modifications and queries to the underlying data until the index operation is complete.

注意

オンラインでのインデックス操作は、 SQL ServerSQL Server のすべてのエディションで使用できるわけではありません。Online index operations are not available in every SQL ServerSQL Server edition. 詳しくは、「SQL Server の各エディションとサポートされている機能」をご覧ください。For more information, see Editions and supported features of SQL Server.

オンラインでのインデックス操作は、Azure SQL Database で使用できます。Online index operations are available in Azure SQL Database.

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

はじめにBefore You Begin

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

  • 1 日 24 時間、週 7 日間、常時稼動のビジネス環境では、オンラインでのインデックス操作を実行することをお勧めします。このような環境では、インデックスの操作中に、ユーザーが同時に操作できることが必要不可欠です。We recommend performing online index operations for business environments that operate 24 hours a day, seven days a week, in which the need for concurrent user activity during index operations is vital.

  • 次の Transact-SQLTransact-SQL ステートメントで、ONLINE オプションを使用できます。The ONLINE option is available in the following Transact-SQLTransact-SQL statements.

  • オンラインでのインデックスの作成、再構築、または削除に関する制限と制約については、「 オンライン インデックス操作のガイドライン」を参照してください。For more limitations and restrictions concerning creating, rebuilding, or dropping indexes online, see Guidelines for Online Index Operations.

セキュリティSecurity

PermissionsPermissions

テーブルまたはビューに対する ALTER 権限が必要です。Requires ALTER permission on the table or view.

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

インデックスをオンラインで再構築するにはTo rebuild an index online

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

  2. [テーブル] フォルダーを展開します。Expand the Tables folder.

  3. プラス記号をクリックして、オンラインでインデックスを再構築するテーブルを展開します。Click the plus sign to expand the table on which you want to rebuild an index online.

  4. [インデックス] フォルダーを展開します。Expand the Indexes folder.

  5. オンラインで再構築するインデックスを右クリックし、 [プロパティ] を選択します。Right-click the index that you want to rebuild online and select Properties.

  6. [ページの選択][オプション] を選択します。Under Select a page, select Options.

  7. [DML のオンライン処理を許可する] を選択し、一覧から [True] を選択します。Select Allow online DML processing, and then select True from the list.

  8. [OK] をクリックします。Click OK.

  9. オンラインで再構築するインデックスを右クリックし、 [再構築] を選択します。Right-click the index that you want to rebuild online and select Rebuild.

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

Transact-SQL の使用Using Transact-SQL

インデックスをオンラインで作成、再構築、または削除するにはTo create, rebuild, or drop an index online

次の例では、AdventureWorks データベース内で、既存のオンラインのインデックスを再構築します。The following example rebuilds an existing online index in the AdventureWorks database.

ALTER INDEX AK_Employee_NationalIDNumber
    ON HumanResources.Employee
    REBUILD WITH (ONLINE = ON);

次の例では、クラスター化インデックスをオンラインで削除し、 NewGroup 句を使用することで、結果のテーブル (ヒープ) をファイル グループ MOVE TO に移動します。The following example deletes a clustered index online and moves the resulting table (heap) to the filegroup NewGroup by using the MOVE TO clause. 移動の前後で sys.indexessys.tables、および sys.filegroups カタログ ビューを参照し、ファイル グループ内のインデックスとテーブルの配置を確認します。The sys.indexes, sys.tables, and sys.filegroups catalog views are queried to verify the index and table placement in the filegroups before and after the move.

-- Create a clustered index on the PRIMARY filegroup if the index does not exist.
IF NOT EXISTS (SELECT name FROM sys.indexes WHERE name = 
            N'AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate')
    CREATE UNIQUE CLUSTERED INDEX
        AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate 
    ON Production.BillOfMaterials (ProductAssemblyID, ComponentID, 
        StartDate)
    ON 'PRIMARY';
GO

-- Verify filegroup location of the clustered index.
SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,
    i.data_space_id, f.name AS [Filegroup Name]
FROM sys.indexes AS i
    JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id
    JOIN sys.tables as t ON i.object_id = t.object_id
        AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U')
GO

-- Create filegroup NewGroup if it does not exist.
IF NOT EXISTS (SELECT name FROM sys.filegroups
                WHERE name = N'NewGroup')
    BEGIN
    ALTER DATABASE AdventureWorks2012
        ADD FILEGROUP NewGroup;
    ALTER DATABASE AdventureWorks2012
        ADD FILE (NAME = File1,
            FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\File1.ndf')
        TO FILEGROUP NewGroup;
    END
GO

-- Verify new filegroup
SELECT * from sys.filegroups;
GO

-- Drop the clustered index and move the BillOfMaterials table to
-- the Newgroup filegroup.
-- Set ONLINE = OFF to execute this example on editions other than Enterprise Edition.
DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate 
    ON Production.BillOfMaterials 
    WITH (ONLINE = ON, MOVE TO NewGroup);
GO

-- Verify filegroup location of the moved table.
SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,
    i.data_space_id, f.name AS [Filegroup Name]
FROM sys.indexes AS i
    JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id
    JOIN sys.tables as t ON i.object_id = t.object_id
        AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U');

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

次のステップNext steps