Share via


CREATE SELECTIVE XML INDEX

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.

Para obtener más información, vea los siguientes temas:

También puede crear índices XML selectivos secundarios. Para obtener información, vea Crear, modificar y quitar índices XML selectivos secundarios.

Icono de vínculo a temas 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 ] . | 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
)

Argumentos

Cláusula CREATE

  • 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.

Por ejemplo: CREATE SELECTIVE XML INDEX sxi_index

Cláusula ON

  • <table_object>
    Es la tabla que contiene la columna XML que se va a indizar. 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.

Por ejemplo: ON Tbl(xmlcol)

WITH XMLNAMESPACES, cláusula

  • <xmlnamespace_list>
    Es la lista de espacios de nombres usados por las rutas de acceso que se van a indizar. Para obtener información acerca de la sintaxis de la cláusula WITH XMLNAMESPACES, vea WITH XMLNAMESPACES (Transact-SQL).

Por ejemplo: WITH XMLNAMESPACES ('http://www.tempuri.org/' as myns)

Cláusula FOR

Por ejemplo:

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

Cláusula WITH

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 acerca de las limitaciones y restricciones, vea Índices XML selectivos (SXI).

Seguridad

Permisos

Se necesita 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 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 ('http://www.tempuri.org/' as myns)
FOR ( path1 = '/myns:book/myns:author/text()' )

Vea también

Conceptos

Índices XML selectivos (SXI)

Crear, modificar y quitar índices XML selectivos

Especificar rutas de acceso y sugerencias de optimización para índices XML selectivos