CREATE XML INDEX (Transact-SQL)CREATE XML INDEX (Transact-SQL)

適用対象: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

指定したテーブルに XML インデックスを作成します。Creates an XML index on a specified table. インデックスはテーブル内にデータがなくても作成できます。An index can be created before there is data in the table. データベース名を修飾して指定することにより、他のデータベース内のテーブルに XML インデックスを作成することもできます。XML indexes can be created on tables in another database by specifying a qualified database name.

注意

リレーショナル インデックスを作成するには、「CREATE INDEX (Transact-SQL)」を参照してください。To create a relational index, see CREATE INDEX (Transact-SQL). 空間インデックスを作成する方法については、「CREATE SPATIAL INDEX (Transact-SQL)」を参照してください。For information about how to create a spatial index, see CREATE SPATIAL INDEX (Transact-SQL).

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

--Create XML Index   
CREATE [ PRIMARY ] XML INDEX index_name   
    ON <object> ( xml_column_name )  
    [ USING XML INDEX xml_index_name   
        [ FOR { VALUE | PATH | PROPERTY } ] ]  
    [ WITH ( <xml_index_option> [ ,...n ] ) ]  
[ ; ]  
  
<object> ::=  
{ database_name.schema_name.table_name | schema_name.table_name | table_name }
  
<xml_index_option> ::=  
{   
    PAD_INDEX  = { ON | OFF }  
  | FILLFACTOR = fillfactor  
  | SORT_IN_TEMPDB = { ON | OFF }  
  | IGNORE_DUP_KEY = OFF  
  | DROP_EXISTING = { ON | OFF }  
  | ONLINE = OFF  
  | ALLOW_ROW_LOCKS = { ON | OFF }  
  | ALLOW_PAGE_LOCKS = { ON | OFF }  
  | MAXDOP = max_degree_of_parallelism  
}  

注意

SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

引数Arguments

[PRIMARY] XML[PRIMARY] XML
指定した xml 列に、XML インデックスを作成します。Creates an XML index on the specified xml column. PRIMARY を指定した場合、クラスター化インデックスは、ユーザー テーブルのクラスター化キーと XML ノード識別子から構成されるクラスター化キーで作成されます。When PRIMARY is specified, a clustered index is created with the clustered key formed from the clustering key of the user table and an XML node identifier. 各テーブルには 249 個までの XML インデックスを作成できます。Each table can have up to 249 XML indexes. XML インデックスを作成するときには、次のことに注意してください。Note the following when you create an XML index:

  • クラスター化インデックスは、ユーザー テーブルの主キー上に存在する必要がある。A clustered index must exist on the primary key of the user table.

  • ユーザー テーブルのクラスター化キーは 15 列に制限されている。The clustering key of the user table is limited to 15 columns.

  • テーブル内の各 xml 列には、1 つのプライマリ XML インデックスと、複数のセカンダリ XML インデックスを作成できます。Each xml column in a table can have one primary XML index and multiple secondary XML indexes.

  • 列にセカンダリ XML インデックスを作成するには、xml 列にプライマリ XML インデックスが存在している必要があります。A primary XML index on an xml column must exist before a secondary XML index can be created on the column.

  • 1 つの XML インデックスは単一の xml 列でのみ作成できます。An XML index can only be created on a single xml column. XML インデックスは xml 以外の列には作成できません。またリレーショナル インデックスは xml 列には作成できません。You cannot create an XML index on a non-xml column, nor can you create a relational index on an xml column.

  • ビュー内の xml 列、xml 列を使用したテーブル値変数、および xml 型の変数には、プライマリまたはセカンダリのいずれの XML インデックスも作成できません。You cannot create an XML index, either primary or secondary, on an xml column in a view, on a table-valued variable with xml columns, or xml type variables.

  • xml 計算列にプライマリ XML インデックスを作成することはできません。You cannot create a primary XML index on a computed xml column.

  • SET オプション設定は、インデックス付きビューおよび計算列インデックスに必要な設定と同じにする必要がある。The SET option settings must be the same as those required for indexed views and computed column indexes. 特に、XML インデックスを作成し、xml 列に値を挿入、削除、更新する場合は、オプション ARITHABORT が ON に設定されている必要があります。Specifically, the option ARITHABORT must be set to ON when an XML index is created and when inserting, deleting, or updating values in the xml column.

詳細については、「XML インデックス (SQL Server)」をご覧ください。For more information, see XML Indexes (SQL Server).

index_nameindex_name
インデックスの名前です。Is the name of the index. インデックス名は、テーブル内では一意である必要がありますが、データベース内で一意である必要はありません。Index names must be unique within a table but do not have to be unique within a database. インデックス名は、識別子の規則に従っている必要があります。Index names must follow the rules of identifiers.

プライマリ XML インデックス名は ###@ 、または @@ で始めることはできません。Primary XML index names cannot start with the following characters: #, ##, @, or @@.

xml_column_namexml_column_name
インデックスの基準となる xml 列を指定します。Is the xml column on which the index is based. 単一の XML インデックス定義には、1 つの xml 列しか指定できませんが、1 つの xml 列には複数のセカンダリ XML インデックスを作成できます。Only one xml column can be specified in a single XML index definition; however, multiple secondary XML indexes can be created on an xml column.

USING XML INDEX xml_index_nameUSING XML INDEX xml_index_name
セカンダリ XML インデックスの作成でプライマリ XML インデックスを使用します。Specifies the primary XML index to use in creating a secondary XML index.

FOR { VALUE | PATH | PROPERTY }FOR { VALUE | PATH | PROPERTY }
セカンダリ XML インデックスの種類を指定します。Specifies the type of secondary XML index.

VALUE
キー列がプライマリ XML インデックス (ノード値とパス) となっている列に、セカンダリ XML インデックスを作成します。Creates a secondary XML index on columns where key columns are (node value and path) of the primary XML index.

PATHPATH
プライマリ XML インデックスのパス値とノード値に基づく列に、セカンダリ XML インデックスを作成します。Creates a secondary XML index on columns built on path values and node values in the primary XML index. PATH セカンダリ インデックスではパス値とノード値がキー列になり、パスの検索時に効率的にシークできるようになります。In the PATH secondary index, the path and node values are key columns that allow efficient seeks when searching for paths.

PROPERTYPROPERTY
PK がベース テーブルの主キーとなっているプライマリ XML インデックスの列 (PK、パスおよびノード値) に、セカンダリ XML インデックスを作成します。Creates a secondary XML index on columns (PK, path and node value) of the primary XML index where PK is the primary key of the base table.

<object>::=<object>::=

インデックスを作成するオブジェクトを、完全修飾または完全修飾ではない形式で指定します。Is the fully qualified or nonfully qualified object to be indexed.

database_namedatabase_name
データベースの名前です。Is the name of the database.

schema_nameschema_name
テーブルが所属するスキーマの名前を指定します。Is the name of the schema to which the table belongs.

table_nametable_name
インデックスを作成するテーブルの名前を指定します。Is the name of the table to be indexed.

<xml_index_option> ::=<xml_index_option> ::=

インデックスを作成するときに使用するオプションを指定します。Specifies the options to use when you create the index.

PAD_INDEX = { ON | OFF }PAD_INDEX = { ON | OFF }
インデックスの埋め込みを指定します。Specifies index padding. 既定値は OFF です。The default is OFF.

ONON
fillfactor で指定される空き領域のパーセンテージが、インデックスの中間レベルのページに適用されます。The percentage of free space that is specified by fillfactor is applied to the intermediate-level pages of the index.

OFF または fillfactor の指定なしOFF or fillfactor is not specified
中間レベルのページはほぼ全容量が使用されます。ただし、中間ページにあるキーのセットを考慮して、インデックスに割り当てることのできる、少なくとも 1 行の最大サイズが収まる分の領域は残されます。The intermediate-level pages are filled to near capacity, leaving sufficient space for at least one row of the maximum size the index can have, considering the set of keys on the intermediate pages.

PAD_INDEX では FILLFACTOR で指定されるパーセンテージが使用されるので、PAD_INDEX オプションは、FILLFACTOR が指定されている場合にのみ有効です。The PAD_INDEX option is useful only when FILLFACTOR is specified, because PAD_INDEX uses the percentage specified by FILLFACTOR. FILLFACTOR で指定されるパーセンテージで 1 行分のデータを格納できない場合、データベース エンジンDatabase Engine では内部的に、最小サイズを格納できるパーセンテージにオーバーライドします。If the percentage specified for FILLFACTOR is not large enough to allow for one row, the データベース エンジンDatabase Engine internally overrides the percentage to allow for the minimum. 中間インデックス ページの行数は、fillfactor の値がどれだけ小さくなっても 2 未満にはなりません。The number of rows on an intermediate index page is never less than two, regardless of how low the value of fillfactor.

FILLFACTOR = fillfactorFILLFACTOR =fillfactor
インデックスの作成時または再構築時に、データベース エンジンDatabase Engine が各インデックス ページのリーフ レベルをどの程度まで埋めるかを、パーセント値で指定します。Specifies a percentage that indicates how full the データベース エンジンDatabase Engine should make the leaf level of each index page during index creation or rebuild. fillfactor 値には、1 ~ 100 の整数値を指定してください。fillfactor must be an integer value from 1 to 100. 既定値は 0 です。The default is 0. fillfactor が 100 または 0 の場合、データベース エンジンDatabase Engine では全容量を使用するリーフ ページでインデックスが作成されます。If fillfactor is 100 or 0, the データベース エンジンDatabase Engine creates indexes with leaf pages filled to capacity.

注意

FILL FACTOR 値 0 と 100 の機能は、まったく同じです。Fill factor values 0 and 100 are the same in all respects.

FILLFACTOR 設定は、インデックスが作成または再構築されるときのみ適用されます。The FILLFACTOR setting applies only when the index is created or rebuilt. データベース エンジンDatabase Engine では、ページ内で指定されたパーセント分の空き領域は動的に保持されません。The データベース エンジンDatabase Engine does not dynamically keep the specified percentage of empty space in the pages. FILL FACTOR 設定を表示するには、sys.indexes カタログ ビューを使用します。To view the fill factor setting, use the sys.indexes catalog view.

重要

データベース エンジンDatabase Engineでは、クラスター化インデックスの作成時にデータが再分配されるため、100 未満の FILLFACTOR 値を使ってクラスター化インデックスを作成すると、データ用のストレージ領域のサイズに影響が生じます。Creating a clustered index with a FILLFACTOR less than 100 affects the amount of storage space the data occupies because the データベース エンジンDatabase Engine redistributes the data when it creates the clustered index.

詳細については、「 インデックスの FILL FACTOR の指定」を参照してください。For more information, see Specify Fill Factor for an Index.

SORT_IN_TEMPDB = { ON | OFF }SORT_IN_TEMPDB = { ON | OFF }
tempdb に一時的な並べ替え結果を格納するかどうかを指定します。Specifies whether to store temporary sort results in tempdb. 既定値は OFF です。The default is OFF.

ONON
インデックス構築に使用される中間の並べ替え結果が tempdb に格納されます。The intermediate sort results that are used to build the index are stored in tempdb. tempdb がユーザー データベースとは異なるディスク セットにある場合は、インデックスの作成に要する時間が削減されます。This may reduce the time required to create an index if tempdb is on a different set of disks than the user database. インデックスの構築中に使用されるディスク領域のサイズは増加します。However, this increases the amount of disk space that is used during the index build.

OFFOFF
中間の並べ替え結果はインデックスと同じデータベースに格納されます。The intermediate sort results are stored in the same database as the index.

インデックスを作成するためにユーザー データベース内に必要となる領域の他に、tempdb には、並べ替えの中間結果を格納するためにほぼ同じ大きさの追加領域が必要になります。In addition to the space required in the user database to create the index, tempdb must have about the same amount of additional space to hold the intermediate sort results. 詳細については、「インデックスの SORT_IN_TEMPDB オプション」を参照してください。For more information, see SORT_IN_TEMPDB Option For Indexes.

IGNORE_DUP_KEY =OFFIGNORE_DUP_KEY =OFF
インデックスの種類が一意になることはないので、XML インデックスでは無効です。Has no effect for XML indexes because the index type is never unique. このオプションを ON に設定すると、エラーが発生します。Do not set this option to ON, or else an error is raised.

DROP_EXISTING = { ON | OFF }DROP_EXISTING = { ON | OFF }
名前付きの、既存の XML インデックスを削除および再構築することを指定します。Specifies that the named, preexisting XML index is dropped and rebuilt. 既定値は OFF です。The default is OFF.

ONON
既存のインデックスは削除され、再構築されます。The existing index is dropped and rebuilt. 指定するインデックス名は、現在存在するインデックスと同じにする必要がありますが、インデックス定義は変更できます。The index name specified must be the same as a currently existing index; however, the index definition can be modified. たとえば、異なる列、並べ替え順、パーティション構成、またはインデックス オプションを指定できます。For example, you can specify different columns, sort order, partition scheme, or index options.

OFFOFF
指定するインデックス名が既に存在する場合、エラーが表示されます。An error is displayed if the specified index name already exists.

DROP_EXISTING を使用してインデックスの種類を変更することはできません。The index type cannot be changed by using DROP_EXISTING. また、プライマリ XML インデックスをセカンダリ XML インデックスに、またはその逆に再定義することもできません。Also, a primary XML index cannot be redefined as a secondary XML index, or vice versa.

ONLINE =OFFONLINE =OFF
インデックス操作中に、基となるテーブルとそれに関連する各インデックスに対してクエリやデータ変更を行えないことを指定します。Specifies that underlying tables and associated indexes are not available for queries and data modification during the index operation. このバージョンの SQL ServerSQL Server では、XML インデックスに対するオンラインのインデックス構築操作はサポートされていません。In this version of SQL ServerSQL Server, online index builds are not supported for XML indexes. XML インデックスに対してこのオプションを ON に設定すると、エラーが発生します。If this option is set to ON for a XML index, an error is raised. ONLINE オプションを省略するか、ONLINE を OFF に設定してください。Either omit the ONLINE option or set ONLINE to OFF.

オフラインのインデックス操作で、XML インデックスの作成、再構築、または削除を行う場合は、テーブルで Sch-M (スキーマ修正) ロックが取得されます。An offline index operation that creates, rebuilds, or drops a XML index, acquires a Schema modification (Sch-M) lock on the table. このため、操作中は、すべてのユーザーは基になるテーブルにアクセスできません。This prevents all user access to the underlying table for the duration of the operation.

注意

オンラインでのインデックス操作は、MicrosoftMicrosoftSQL ServerSQL Server のすべてのエディションで使用できるわけではありません。Online index operations are not available in every edition of MicrosoftMicrosoftSQL ServerSQL Server. SQL ServerSQL Server の各エディションでサポートされる機能の一覧については、「Editions and Supported Features for SQL Server 2016」 (SQL Server 2016 のエディションとサポートされる機能) を参照してください。For a list of features that are supported by the editions of SQL ServerSQL Server, see Editions and Supported Features for SQL Server 2016.

ALLOW_ROW_LOCKS = { ON | OFF }ALLOW_ROW_LOCKS = { ON | OFF }
行ロックを許可するかどうかを指定します。Specifies whether row locks are allowed. 既定値は ON です。The default is ON.

ONON
インデックスにアクセスするとき、行ロックが許可されます。Row locks are allowed when accessing the index. いつ行ロックを使用するかは、データベース エンジンDatabase Engineによって決定されます。The データベース エンジンDatabase Engine determines when row locks are used.

OFFOFF
行ロックは使用されません。Row locks are not used.

ALLOW_PAGE_LOCKS = { ON | OFF }ALLOW_PAGE_LOCKS = { ON | OFF }
ページ ロックを許可するかどうかを指定します。Specifies whether page locks are allowed. 既定値は ON です。The default is ON.

ONON
ページにアクセスするとき、行ロックが許可されます。Page locks are allowed when accessing the index. いつページ ロックを使用するかは、データベース エンジンDatabase Engine によって決定されます。The データベース エンジンDatabase Engine determines when page locks are used.

OFFOFF
ページ ロックは使用されません。Page locks are not used.

MAXDOP = max_degree_of_parallelismMAXDOP =max_degree_of_parallelism
インデックス操作の間、max degree of parallelism サーバー構成オプション更新オプションをオーバーライドします。Overrides the Configure the max degree of parallelism Server Configuration Option configuration option for the duration of the index operation. 並列プランの実行で使用されるプロセッサ数を制限するには、MAXDOP を使用します。Use MAXDOP to limit the number of processors used in a parallel plan execution. 最大数は 64 プロセッサです。The maximum is 64 processors.

重要

MAXDOP オプションはすべての XML インデックスで構文的にサポートされていますが、プライマリ XML インデックスの場合、CREATE XML INDEX では単一のプロセッサのみが使用されます。Although the MAXDOP option is syntactically supported for all XML indexes, for a primary XML index, CREATE XML INDEX uses only a single processor.

max_degree_of_parallelism は次のように指定できます。max_degree_of_parallelism can be:

11
並列プラン生成を抑制します。Suppresses parallel plan generation.

>1>1
現在のシステム ワークロードに基づいて、並列インデックス操作で使用される最大プロセッサ数を指定の数以下に制限します。Restricts the maximum number of processors used in a parallel index operation to the specified number or fewer based on the current system workload.

0 (既定値)0 (default)
現在のシステム ワークロードに基づいて、実際の数以下のプロセッサを使用します。Uses the actual number of processors or fewer based on the current system workload.

詳細については、「 並列インデックス操作の構成」を参照してください。For more information, see Configure Parallel Index Operations.

注意

並列インデックス操作は、MicrosoftMicrosoftSQL ServerSQL Server のすべてのエディションで使用できるわけではありません。Parallel index operations are not available in every edition of MicrosoftMicrosoftSQL ServerSQL Server. SQL ServerSQL Server の各エディションでサポートされる機能の一覧については、「Editions and Supported Features for SQL Server 2016」 (SQL Server 2016 のエディションとサポートされる機能) を参照してください。For a list of features that are supported by the editions of SQL ServerSQL Server, see Editions and Supported Features for SQL Server 2016.

解説Remarks

計算列のデータ型をインデックス キー列または非キー列として使用できる限り、xml データ型から派生した計算列は、キー列または非キー列としてインデックスを設定できます。Computed columns derived from xml data types can be indexed either as a key or included nonkey column as long as the computed column data type is allowable as an index key column or nonkey column. xml 計算列にプライマリ XML インデックスを作成することはできません。You cannot create a primary XML index on a computed xml column.

XML インデックスについての情報を表示するには、sys.xml_indexes カタログ ビューを使用します。To view information about XML indexes, use the sys.xml_indexes catalog view.

XML インデックスの詳細については、「XML インデックス (SQL Server)」を参照してください。For more information about XML indexes, see XML Indexes (SQL Server).

インデックス作成に関する詳細説明Additional Remarks on Index Creation

インデックスの作成の詳細については、「CREATE INDEX (Transact-SQL)」の「解説」を参照してください。For more information about index creation, see the "Remarks" section in CREATE INDEX (Transact-SQL).

Examples

A.A. プライマリ XML インデックスを作成するCreating a primary XML index

次の例では、CatalogDescription テーブルの Production.ProductModel 列にプライマリ XML インデックスを作成します。The following example creates a primary XML index on the CatalogDescription column in the Production.ProductModel table.

USE AdventureWorks2012;  
GO  
IF EXISTS (SELECT * FROM sys.indexes  
            WHERE name = N'PXML_ProductModel_CatalogDescription')  
    DROP INDEX PXML_ProductModel_CatalogDescription   
        ON Production.ProductModel;  
GO  
CREATE PRIMARY XML INDEX PXML_ProductModel_CatalogDescription  
    ON Production.ProductModel (CatalogDescription);  
GO  

B.B. セカンダリ XML インデックスを作成するCreating a secondary XML index

次の例では、CatalogDescription テーブルの Production.ProductModel 列にセカンダリ XML インデックスを作成します。The following example creates a secondary XML index on the CatalogDescription column in the Production.ProductModel table.

USE AdventureWorks2012;  
GO  
IF EXISTS (SELECT name FROM sys.indexes  
            WHERE name = N'IXML_ProductModel_CatalogDescription_Path')  
    DROP INDEX IXML_ProductModel_CatalogDescription_Path  
        ON Production.ProductModel;  
GO  
CREATE XML INDEX IXML_ProductModel_CatalogDescription_Path   
    ON Production.ProductModel (CatalogDescription)  
    USING XML INDEX PXML_ProductModel_CatalogDescription FOR PATH ;  
GO  

参照See Also

ALTER INDEX (Transact-SQL) ALTER INDEX (Transact-SQL)
CREATE INDEX (Transact-SQL) CREATE INDEX (Transact-SQL)
CREATE PARTITION FUNCTION (Transact-SQL) CREATE PARTITION FUNCTION (Transact-SQL)
CREATE PARTITION SCHEME (Transact-SQL) CREATE PARTITION SCHEME (Transact-SQL)
CREATE SPATIAL INDEX (Transact-SQL) CREATE SPATIAL INDEX (Transact-SQL)
CREATE STATISTICS (Transact-SQL) CREATE STATISTICS (Transact-SQL)
CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
データ型 (Transact-SQL) Data Types (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL) DBCC SHOW_STATISTICS (Transact-SQL)
DROP INDEX (Transact-SQL) DROP INDEX (Transact-SQL)
XML インデックス (SQL Server) XML Indexes (SQL Server)
sys.indexes (Transact-SQL) sys.indexes (Transact-SQL)
sys.index_columns (Transact-SQL) sys.index_columns (Transact-SQL)
sys.xml_indexes (Transact-SQL) sys.xml_indexes (Transact-SQL)
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
XML インデックス (SQL Server)XML Indexes (SQL Server)