CREAR ÍNDICE XML SELECTIVO (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Crea un nuevo índice XML selectivo en la tabla y la columna XML especificadas. Los índices XML selectivos mejoran el rendimiento de la indización y las consultas XML al indizar únicamente el subconjunto de nodos que se suele consultar. También puede crear índices XML selectivos secundarios. Para obtener más información, vea Creación, modificación y eliminación de índices XML selectivos secundarios.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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  
)  

Argumentos

index_name
Es el nombre del nuevo índice que se va a crear. Los nombres de índice deben ser únicos en una tabla, pero no es necesario que sean únicos en una base de datos. Los nombres de índice deben seguir las reglas de los identificadores.

<objeto_de_tabla> Es la tabla que contiene la columna XML que se va a indexar. Use uno de los formatos siguientes:

  • database_name.schema_name.table_name

  • database_name..table_name

  • schema_name.table_name

  • table_name

xml_column_name
Es el nombre de la columna XML que contiene las rutas de acceso que se van a indizar.

[WITH XMLNAMESPACES (<lista_de_espacios_de _nombres_xml>)] Es la lista de espacios de nombres usados por las rutas de acceso al índice. Para saber más sobre la sintaxis de la cláusula WITH XMLNAMESPACES, vea WITH XMLNAMESPACES (Transact-SQL).

FOR (<lista_de_rutas_de_acceso_de_nodos_promocionados>) Es la lista de rutas de acceso que se va a indexar con sugerencias opcionales de optimización. Para obtener información sobre las rutas de acceso y las sugerencias de optimización que se pueden especificar en la instrucción CREATE o ALTER, vea Especificación de rutas de acceso y sugerencias de optimización para índices XML selectivos.

WITH <opciones_de_índice> Para obtener información sobre las opciones de índice, vea CREATE XML INDEX (índices XML selectivos).

Prácticas recomendadas

Cree un índice XML selectivo en lugar de un índice XML normal en la mayoría de los casos para mejorar el rendimiento y lograr un almacenamiento más eficiente. Sin embargo, no se recomienda usar un índice XML selectivo cuando alguna de las condiciones siguientes sea verdadera:

  • Necesita asignar un gran número de rutas de acceso del nodo.

  • Necesita admitir consultas para elementos desconocidos o elementos de una ubicación desconocida.

Limitaciones y restricciones

Para obtener información sobre las limitaciones y restricciones, vea Índices XML selectivos (SXI).

Seguridad

Permisos

Requiere el permiso ALTER en la tabla o la vista. El usuario debe ser miembro del rol fijo de servidor sysadmin o de los roles fijos de base de datos db_ddladmin y db_owner .

Ejemplos

En el ejemplo siguiente se muestra la sintaxis para crear un índice XML selectivo. También se muestran varias variaciones de la sintaxis para describir las rutas de acceso que se van a indizar, con sugerencias opcionales de optimización.

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)  
);  

El ejemplo siguiente incluye una cláusula WITH XMLNAMESPACES.

CREATE SELECTIVE XML INDEX on T1(C1)  
WITH XMLNAMESPACES ('https://www.tempuri.org/' as myns)  
FOR ( path1 = '/myns:book/myns:author/text()' );  

Consulte también

Índices XML selectivos (SXI)
Crear, modificar y quitar índices XML selectivos
Especificar rutas de acceso y sugerencias de optimización para índices XML selectivos