CREATE SELECTIVE XML INDEX
对指定的表和 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()' )