指定したテーブルと XML 列に新しい選択的 XML インデックスを作成します。
選択的 XML インデックスは、クエリを通常行うノードのサブセットにのみインデックスを作成します。そのため、XML インデックス作成とクエリのパフォーマンスが向上します。
詳細については、次の各トピックを参照してください。
選択的セカンダリ XML インデックスを作成することもできます。 詳細については、「選択的セカンダリ XML インデックスの作成、変更、および削除」を参照してください。
構文
CREATE SELECTIVE XML INDEX index_name
ON <table_object> (<xml_column_name>)
[WITH XMLNAMESPACES (<xmlnamespace_list>)]
FOR (<promoted_node_path_list>)
[WITH (<index_options>)]
<table_object> ::= { [ database_name. [ schema_name ] . | schema_name. ] table_name }
<promoted_node_path_list> ::= <named_promoted_node_path_item> [, <promoted_node_path_list>]
<named_promoted_node_path_item> ::= <path_name> = <promoted_node_path_item>
<promoted_node_path_item>::=<xquery_node_path_item> | <sql_values_node_path_item>
<xquery_node_path_item> ::= <node_path> [as XQUERY <xsd_type_or_node_hint>] [SINGLETON]
<xsd_type_or_node_hint> ::= [<xsd_type>] [MAXLENGTH(x)] | node()
<sql_values_node_path_item> ::= <node_path> as SQL <sql_type> [SINGLETON]
<node_path> ::= <character_string_literal>
<xsd_type> ::= <character_string_literal>
<sql_type> ::= <identifier>
<path_name> ::= <identifier>
<xmlnamespace_list> ::= <xmlnamespace_item> [, <xmlnamespace_list>]
<xmlnamespace_item> ::= <xmlnamespace_uri> AS <xmlnamespace_prefix>
<xml_namespace_uri> ::= <character_string_literal>
<xml_namespace_prefix> ::= <identifier>
<index_options> ::= (
| 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
)
引数
CREATE 句
- index_name
作成する新しいインデックスの名前を指定します。 インデックス名は、テーブル内では一意である必要がありますが、データベース内で一意である必要はありません。 インデックス名は、識別子のルールに従っている必要があります。
例: CREATE SELECTIVE XML INDEX sxi_index
ON 句
<table_object>
インデックスを作成する XML 列が含まれるテーブルを指定します。 次のどちらかの形式を使用します。database_name.schema_name.table_name
database_name..table_name
schema_name.table_name
table_name
xml_column_name
インデックスを作成するパスが含まれる XML 列の名前を指定します。
例: ON Tbl(xmlcol)
WITH XMLNAMESPACES 句
- <xmlnamespace_list>
インデックスを作成するパスで使用される名前空間の一覧を指定します。 WITH XMLNAMESPACES 句の構文については、「WITH XMLNAMESPACES (Transact-SQL)」を参照してください。
例: WITH XMLNAMESPACES ('http://www.tempuri.org/' as myns)
FOR 句
- <promoted_node_path_list>
省略可能な最適化ヒントを使用してインデックスを作成するパスの一覧を指定します。 CREATE または ALTER ステートメントに指定できるパスと最適化ヒントについては、「選択的 XML インデックスのパスと最適化ヒントの指定」を参照してください。
例:
FOR(
pathab = '/a/b' as XQUERY 'node()'
pathabc = '/a/b/c' as XQUERY 'xs:double',
pathdtext = '/a/b/d/text()' as XQUERY 'xs:string' MAXLENGTH(200) SINGLETON
pathabe = '/a/b/e' as SQL NVARCHAR(100)
)
WITH 句
- <index_options>
インデックス オプションについては、「CREATE XML INDEX (選択的 XML インデックス)」を参照してください。
ベスト プラクティス
ほとんどの場合、通常の XML インデックスではなく選択的 XML インデックスを作成すると、パフォーマンスが向上し、効率的な保管が可能になります。 ただし、選択的 XML インデックスは、次の条件のいずれかに該当する場合はお勧めしません。
多数のノード パスをマップする必要がある場合。
不明な要素または不明な位置にある要素のクエリをサポートする必要がある場合。
制限事項と制約事項
この機能の制限および制約については、「選択的 XML インデックス (SXI)」を参照してください。
セキュリティ
権限
テーブルまたはビューに対する ALTER 権限が必要です。 実行するには、固定サーバー ロール sysadmin または、固定データベース ロール db_ddladmin および db_owner のメンバーである必要があります。
使用例
次の例では、選択的 XML インデックスを作成するための構文を示しています。 また、インデックスを作成するパスと省略可能な最適化ヒントを指定する構文のいくつかのバリエーションを示します。
CREATE SELECTIVE XML INDEX sxi_index
ON Tbl(xmlcol)
FOR(
pathab = '/a/b' as XQUERY 'node()'
pathabc = '/a/b/c' as XQUERY 'xs:double',
pathdtext = '/a/b/d/text()' as XQUERY 'xs:string' MAXLENGTH(200) SINGLETON
pathabe = '/a/b/e' as SQL NVARCHAR(100)
)
次の例では、WITH XMLNAMESPACES 句を使用しています。
CREATE SELECTIVE XML INDEX on T1(C1)
WITH XMLNAMESPACES ('http://www.tempuri.org/' as myns)
FOR ( path1 = '/myns:book/myns:author/text()' )