Índices XML selectivos (SXI)

Los índices XML selectivos son otro tipo de índice XML disponible además de los índices XML normales. Los objetivos de la característica de índice XML selectivo son los siguientes:

  • Mejorar el rendimiento de las consultas sobre datos XML almacenados en SQL Server.

  • Admitir una indización más rápida de cargas de trabajo grandes de datos XML.

  • Mejorar la escalabilidad reduciendo los costos de almacenamiento de los índices XML.

La limitación principal de los índices XML normales es que indizan el documento XML completo. Este conduce a varias desventajas importantes, como el menor rendimiento de las consultas y el mayor costo de mantenimiento de los índices, que están relacionadas principalmente con los costos de almacenamiento del índice.

La característica de índice XML selectivo le permite promover solo ciertas rutas de acceso de los documentos XML al índice. En el momento de la creación del índice se evalúan estas rutas de acceso, y los nodos a los que señalan se dividen y se almacenan en una tabla relacional en SQL Server. Esta característica emplea un algoritmo de asignación eficiente desarrollado por Microsoft Research en colaboración con el equipo del producto SQL Server. Este algoritmo asigna los nodos XML a una única tabla relacional, y consigue un rendimiento excepcional y solo necesita una cantidad modesta de espacio de almacenamiento.

La característica de índice XML selectivo también admite índices XML selectivos secundarios sobre nodos que se han indizado mediante un índice XML selectivo. Estos índices selectivos secundarios son eficaces y mejoran aún más el rendimiento de las consultas.

[!NOTA]

Para crear índices XML selectivos, necesita habilitar la base de datos con sp_db_selective_xml_index. Para obtener más información acerca de cómo habilitar la base de datos, vea sp_db_selective_xml_index.

En este tema

  1. Ventajas de los índices XML selectivos

  2. Índices XML selectivos e índices XML principales

  3. Ejemplo simple de un índice XML selectivo

  4. Características admitidas, requisitos previos y limitaciones

    1. Características XML admitidas

    2. Características XML no admitidas

    3. Requisitos previos

    4. Limitaciones

  5. Tareas relacionadas

Ventajas de los índices XML selectivos

Los índices XML selectivos proporcionan las ventajas siguientes:

  1. Rendimiento de consultas mejorado considerablemente sobre el tipo de datos XML para cargas típicos de consulta.

  2. Menores requisitos de almacenamiento en comparación con los índices XML normales.

  3. Menores costos de mantenimiento de índices en comparación con los índices XML normales.

  4. No es necesario actualizar las aplicaciones para beneficiarse de los índices XML selectivos.

[ARRIBA]

Índices XML selectivos e índices XML principales

Nota importanteImportante

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:

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

  • Admita consultas para elementos desconocidos o elementos de una ubicación desconocida en la estructura del documento.

[ARRIBA]

Ejemplo simple de un índice XML selectivo

Considere el siguiente fragmento XML como un documento XML de una tabla de aproximadamente 500.000 filas:

<book>
    <created>2004-03-01</created> 
    <authors>Various</authors>
    <subjects>
        <subject>English wit and humor -- Periodicals</subject>
        <subject>AP</subject> 
    </subjects>
    <title>Punch, or the London Charivari, Volume 156, April 2, 1919</title>
    <id>etext11617</id>
</book>

Crear un índice XML principal sobre tantas filas de este esquema simple lleva mucho tiempo. La consulta de estos datos también se resiente del hecho de que un índice XML principal no admite la indización selectiva.

Si solo necesita consultar estos datos sobre la ruta de acceso /book/title y la ruta de acceso /book/subjects, puede crear el índice XML selectivo siguiente:

CREATE SELECTIVE XML INDEX SXI_index
ON Tbl(xmlcol)
FOR 
(
    pathTitle = '/book/title/text()' AS XQUERY 'xs:string', 
    pathAuthors = '/book/authors' AS XQUERY 'node()',
    pathId = '/book/id' AS SQL NVARCHAR(100)
)

La instrucción anterior es un buen ejemplo de sintaxis de CREATE que se usa cuando se crea un índice XML selectivo. En la instrucción CREATE, primero debe proporcionar un nombre para el índice e identificar la tabla y la columna XML para indizar. A continuación se proporcionan las rutas de acceso al índice. Una ruta de acceso consta de tres partes:

  1. Un nombre que identifica de forma única la ruta de acceso.

  2. Una expresión XQuery que describe la ruta de acceso.

  3. Sugerencias opcionales de optimización.

Para obtener más información acerca de estos elementos, vea Tareas relacionadas.

[ARRIBA]

Características admitidas, requisitos previos y limitaciones

Características XML admitidas

Los índices XML selectivos admiten XQuery admitido por SQL Server dentro de los métodos exist(), value() y nodes().

  • Para los métodos exist(), value() y nodes(), los índices XML selectivos contienen información suficiente para transformar toda la expresión.

  • En el caso de los métodos query() y modify(), los índices XML selectivos solo se pueden usar para el filtrado de nodos.

  • Para el método query(), no se usan índices XML selectivos para recuperar resultados.

  • Para el método modify(), no se usan índices XML selectivos para actualizar documentos XML.

[ARRIBA]

Características XML no admitidas

Los índices XML selectivos no admiten las siguientes características compatibles con la implementación de XML de SQL Server:

  • Indizar nodos con tipos XS complejos: tipos de unión, tipos de secuencia y tipos de lista.

  • Indizar nodos con tipos XS binarios: por ejemplo, base64Binary y hexBinary.

  • Especificar los nodos para indizar con expresiones Xpath que contienen el carácter comodín * al final. Por ejemplo, /a/b/c/*, /a//b/* o /a/b/*:c.

  • Indizar cualquier eje distinto de secundario, atributo o descendiente. El caso //<step> se permite como un caso especial.

  • Indizar instrucciones de procesamiento y comentarios XML.

  • Especificar y recuperar el identificador de un nodo mediante la función id().

[ARRIBA]

Requisitos previos

Los siguientes requisitos previos deben existir antes de poder crear un índice XML selectivo en una columna XML en una tabla de usuario:

  • Debe existir un índice clúster en la clave principal de la tabla de usuario.

  • La clave principal de la tabla de usuario está limitada a un tamaño de 128 bytes cuando se usa con índices XML selectivos.

  • La clave de agrupación de la tabla de usuario está limitada a 15 columnas cuando se usa con índices XML selectivos.

[ARRIBA]

Limitaciones

Requisitos generales y limitaciones

  • Cada índice XML selectivo solo se puede crear en una única columna XML. No puede crear un índice XML selectivo en una columna que no sea XML. Cada columna XML de una tabla solo puede tener un índice XML selectivo. Cada tabla puede tener hasta 249 índices XML selectivos.

Limitaciones sobre objetos admitidos

No puede crear índices XML selectivos en los objetos siguientes:

  • Columnas XML de una vista.

  • Variable con valores de tabla con columnas XML.

  • Variables de tipo XML.

  • Columnas XML calculadas.

  • Columnas XML con una profundidad de más de 128 nodos anidados.

Limitaciones relativas al almacenamiento

Hay un límite finito en cuanto al número de nodos del documento XML que se pueden agregar al índice. Un índice XML selectivo asigna documentos XML a una única tabla relacional. Por tanto, no puede tener más de 1024 columnas no NULL en ninguna fila especificada de la tabla. Además, muchas de las limitaciones de las columnas dispersas también se aplican a los índices XML selectivos, ya que los índices usan columnas dispersas para el almacenamiento.

El número máximo de columnas no NULL no admitidas en una fila determinada depende del tamaño de los datos de las columnas:

  • En el caso mejor, se admiten 1024 columnas no NULL cuando todas las columnas son de tipo bit.

  • En el caso peor, solo se admiten 236 columnas no NULL cuando todas las columnas son objetos grandes de tipo varchar.

Los índices XML selectivos usan varias columnas internamente para cada ruta de acceso del nodo que se indiza. El número total de nodos que se pueden indizar es de hasta 50.

Los índices XML selectivos se regeneran al crear (con CREATE) o modificar (con ALTER) el índice.

Cuando usa CREATE o ALTER en un índice XML selectivo, se vuelve a generar en modo uniproceso sin conexión. Con frecuencia las instrucciones ALTER afectan negativamente al rendimiento de las consultas sobre los documentos XML indizados.

Otras limitaciones

  • Los índices XML selectivos no se admiten en sugerencias de consulta.

  • Los índices XML selectivos y los índices XML selectivos secundarios no se admiten en el Asistente para la optimización de base de datos.

[ARRIBA]

Tareas relacionadas

Tarea

Tema

Especificar las rutas de acceso del nodo que desea indizar y las sugerencias opcionales de optimización cuando cree o modifique un índice XML selectivo.

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

Crear, modificar o quitar un índice XML selectivo.

Crear, modificar y quitar índices XML selectivos

Crear, modificar o quitar un índice XML selectivo secundario.

Crear, modificar y quitar índices XML selectivos secundarios

[ARRIBA]