适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Microsoft Fabric 中的 SQL 数据库
对指定的表和 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.table_name | schema_name.table_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
)
参数
index_name
要创建的新索引的名称。 索引名称在表中必须唯一,但在数据库中不必唯一。 索引名称必须符合标识符的规则。
< >table_object 是包含要建立索引的 XML 列的表。 使用以下格式之一:
database_name.schema_name.table_namedatabase_name..table_nameschema_name.table_nametable_name
xml_column_name
XML 列的名称,该列中包含要建立索引的路径。
[WITH XMLNAMESPACES (xmlnamespace_list<)] 是要建立索引的路径使用的命名空间的列表。 有关 WITH XMLNAMESPACES 子句的语法的信息,请参阅 WITH XMLNAMESPACES (Transact-SQL)。
FOR (promoted_node_path_list<) 是要使用可选优化提示建立索引的路径列表。 有关可以在 CREATE 或 ALTER 语句中指定的路径和优化提示的信息,请参阅为选择性 XML 索引指定路径和优化提示。
WITH <index_options> 有关索引选项的信息,请参阅 CREATE XML INDEX(选择性 XML 索引)。
最佳实践
在大多数情况下,通过创建选择性 XML 索引而不是普通 XML 索引,可以改善性能和提高存储效率。 但在以下条件之一成立时,不推荐使用选择性 XML 索引:
您需要映射大量节点路径。
您需要支持对未知元素或未知位置中元素的查询。
限制和局限
有关限制和局限的信息,请参阅选择性 XML 索引 (SXI)。
安全性
权限
要求对表或视图具有 ALTER 权限。 用户必须是 sysadmin 固定服务器角色的成员,或者是 db_ddladmin 和 db_owner 固定数据库角色的成员。
示例
下面的示例显示了创建选择性 XML 索引的语法。 它还显示了该语法的若干变化形式,以便描述使用可选的优化提示建立索引的路径。
CREATE TABLE Tbl ( id INT PRIMARY KEY, xmlcol XML );
GO
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 ('https://www.tempuri.org/' as myns)
FOR ( path1 = '/myns:book/myns:author/text()' );