付加列インデックスの作成Create Indexes with Included Columns

このトピックに適用されますはいSQL ServerはいAzure SQL DatabaseありませんAzure SQL Data Warehouseなし。並列データ ウェアハウスTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

このトピックでは、 SQL ServerSQL Server または SQL Server Management StudioSQL Server Management Studio を使用し、付加列 (非キー列) を追加して、 Transact-SQLTransact-SQLの非クラスター化インデックスの機能を拡張する方法について説明します。This topic describes how to add included (or nonkey) columns to extend the functionality of nonclustered indexes in SQL ServerSQL Server by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. 非キー列を含めることにより、より多くのクエリをカバーする非クラスター化インデックスを作成できます。By including nonkey columns, you can create nonclustered indexes that cover more queries. これは、非キー列には次の利点があるためです。This is because the nonkey columns have the following benefits:

  • 非キー列には、インデックス キー列として許可されていないデータ型を設定できる。They can be data types not allowed as index key columns.

  • インデックス キー列の数やインデックス キーのサイズを計算するときに、 データベース エンジンDatabase Engine では非キー列が考慮されない。They are not considered by the データベース エンジンDatabase Engine when calculating the number of index key columns or index key size.

    クエリ内のすべての列が、キー列または非キー列としてインデックスに含まれるているとき、非キー列を含むインデックスにより、クエリ パフォーマンスが大幅に向上します。An index with nonkey columns can significantly improve query performance when all columns in the query are included in the index either as key or nonkey columns. クエリ オプティマイザーではインデックス内のすべての列値を参照できるので、テーブルやクラスター化インデックスのデータにアクセスすることがなく、ディスク I/O 操作が少なくて済むため、パフォーマンスが向上します。Performance gains are achieved because the query optimizer can locate all the column values within the index; table or clustered index data is not accessed resulting in fewer disk I/O operations.

注意

クエリによって参照されるすべての列がインデックスに含まれているときは、一般的に、そのインデックスは クエリをカバーしていると呼ばれます。When an index contains all the columns referenced by a query it is typically referred to as covering the query.

作業を開始する準備Before You Begin

設計上の推奨事項Design Recommendations

  • 検索や参照に使用される列のみがキー列になるように、大きなサイズのインデックス キーを使用して、非クラスター化インデックスを設計し直します。Redesign nonclustered indexes with a large index key size so that only columns used for searching and lookups are key columns. クエリをカバーする他のすべての列を非キー列にします。Make all other columns that cover the query into nonkey columns. その結果、クエリをカバーするために必要なすべての列を含むことができますが、インデックス キー自体は小さく、効率的です。In this way, you will have all columns needed to cover the query, but the index key itself is small and efficient.

  • 非クラスター化インデックスに非キー列を含め、現在のインデックス サイズの制限で (最大 32 個のキー列と、最大 1,700 バイトのインデックス キー サイズ) を超えないようにします ( SQL Server 2016SQL Server 2016 より前は、最大 16 個のキー列と最大 900 バイトのインデックス キーのサイズでした)。Include nonkey columns in a nonclustered index to avoid exceeding the current index size limitations of a maximum of 32 key columns and a maximum index key size of 1,700 bytes (16 key columns and 900 bytes prior to SQL Server 2016SQL Server 2016). インデックス キー列の数やインデックス キーのサイズを計算するときに、 データベース エンジンDatabase Engine では非キー列が考慮されません。The データベース エンジンDatabase Engine does not consider nonkey columns when calculating the number of index key columns or index key size.

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

  • 非キー列を定義できるのは、クラスター化されていないインデックスだけです。Nonkey columns can only be defined on nonclustered indexes.

  • textntextimage を除くすべてのデータ型は、非キー列として使用できます。All data types except text, ntext, and image can be used as nonkey columns.

  • 決定的な計算列は、正確かどうかに関係なく、非キー列にすることができます。Computed columns that are deterministic and either precise or imprecise can be nonkey columns. 詳細については、「 計算列のインデックス」を参照してください。For more information, see Indexes on Computed Columns.

  • 計算列が imagentexttext の各データ型から派生している場合は、計算列のデータ型が非キー インデックス列として許可されている限り、非キー列にできます。Computed columns derived from image, ntext, and text data types can be nonkey columns as long as the computed column data type is allowed as a nonkey index column.

  • インデックスを先に削除しない限り、非キー列をテーブルから削除できません。Nonkey columns cannot be dropped from a table unless that table’s index is dropped first.

  • 次の操作以外に、非キー列は変更できません。Nonkey columns cannot be changed, except to do the following:

    • 列の NULL 値の許容を NOT NULL から NULL に変更する。Change the nullability of the column from NOT NULL to NULL.

    • varcharnvarchar、または varbinary の各列の長さを拡張します。Increase the length of varchar, nvarchar, or varbinary columns.

セキュリティSecurity

PermissionsPermissions

テーブルまたはビューに対する ALTER 権限が必要です。Requires ALTER permission on the table or view. 実行するには、 sysadmin 固定サーバー ロール、または db_ddladmin 固定データベース ロールおよび db_owner 固定データベース ロールのメンバーである必要があります。User must 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 create an index with nonkey columns

  1. オブジェクト エクスプローラーで、非キー列を含むインデックスの作成先となるテーブルが格納されているデータベースを、プラス記号をクリックして展開します。In Object Explorer, click the plus sign to expand the database that contains the table on which you want to create an index with nonkey columns.

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

  3. プラス記号をクリックして、非キー列を含むインデックスの作成先となるテーブルを展開します。Click the plus sign to expand the table on which you want to create an index with nonkey columns.

  4. [インデックス] フォルダーを右クリックし、 [新しいインデックス]をポイントし、 [非クラスター化インデックス...]を選択します。Right-click the Indexes folder, point to New Index, and select Non-Clustered Index….

  5. [新しいインデックス] ダイアログ ボックスの [全般] ページで、 [インデックス名] ボックスに新しいインデックスの名前を入力します。In the New Index dialog box, on the General page, enter the name of the new index in the Index name box.

  6. [インデックス キー列] タブで、 [追加]をクリックします。Under the Index key columns tab, click Add….

  7. テーブル名から列を選択 ダイアログ ボックスで、インデックスに追加する 1 つまたは複数のテーブル列のチェック ボックスをオンにします。In the Select Columns fromtable_name dialog box, select the check box or check boxes of the table column or columns to be added to the index.

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

  9. [付加列] タブで、 [追加]をクリックします。Under the Included columns tab, click Add….

  10. テーブル名から列を選択 ダイアログ ボックスで、非キー列としてインデックスに追加する 1 つまたは複数のテーブル列のチェック ボックスをオンにします。In the Select Columns fromtable_name dialog box, select the check box or check boxes of the table column or columns to be added to the index as nonkey columns.

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

  12. [新しいインデックス] ダイアログ ボックスで、 [OK]をクリックします。In the New Index dialog box, click OK.

Transact-SQL の使用Using Transact-SQL

非キー列を含むインデックスを作成するにはTo create an index with nonkey columns

  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  
    -- Creates a nonclustered index on the Person.Address table with four included (nonkey) columns.   
    -- index key column is PostalCode and the nonkey columns are  
    -- AddressLine1, AddressLine2, City, and StateProvinceID.  
    CREATE NONCLUSTERED INDEX IX_Address_PostalCode  
    ON Person.Address (PostalCode)  
    INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);  
    GO  
    

CREATE INDEX (Transact-SQL) CREATE INDEX (Transact-SQL)
SQL Server インデックス デザイン ガイドSQL Server Index Design Guide