Partilhar via


Índices XML Seletivos (SXI)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Os índices XML seletivos são outro tipo de índice XML disponível para si, além dos índices XML comuns. Os objetivos da funcionalidade seletiva de índice XML são os seguintes:

  • Para melhorar o desempenho das consultas sobre dados XML armazenados no SQL Server.

  • Para suportar uma indexação mais rápida de grandes cargas de trabalho de dados XML.

  • Melhorar a escalabilidade reduzindo os custos de armazenamento dos índices XML.

A principal limitação dos índices XML comuns é que indexam todo o documento XML. Isto leva a várias desvantagens significativas, como a diminuição do desempenho das consultas e o aumento do custo de manutenção do índice, principalmente relacionados com os custos de armazenamento do índice.

A funcionalidade seletiva de índice XML permite-lhe promover apenas certos caminhos dos documentos XML para indexar. No momento da criação do índice, estes caminhos são avaliados e os nós para os quais apontam são destruídos e armazenados dentro de uma tabela relacional no SQL Server. Esta funcionalidade utiliza um algoritmo de mapeamento eficiente desenvolvido pela Microsoft Research em colaboração com a equipa de produto do SQL Server. Este algoritmo mapeia os nós XML para uma única tabela relacional e alcança um desempenho excecional, requerendo apenas um espaço de armazenamento modesto.

A funcionalidade do índice XML seletivo também suporta índices XML seletivos secundários aplicados a nós que foram indexados por um índice XML seletivo. Estes índices seletivos secundários são eficientes e melhoram ainda mais o desempenho das consultas.

Benefícios dos índices XML seletivos

Índices XML seletivos oferecem os seguintes benefícios:

  1. Desempenho de consulta muito melhorado em relação ao tipo de dados XML para cargas típicas de consulta.

  2. Requisitos de armazenamento reduzidos em comparação com índices XML comuns.

  3. Redução dos custos de manutenção do índice em comparação com índices XML comuns.

  4. Não é necessário atualizar aplicações para beneficiar de índices XML seletivos.

Índices XML seletivos e índices XML primários

Importante

Crie um índice XML seletivo em vez de um índice XML comum, na maioria dos casos, para melhor desempenho e armazenamento mais eficiente.

No entanto, um índice XML seletivo não é recomendado quando alguma das seguintes condições é verdadeira:

  • Mapeias um grande número de caminhos de nós.

  • Suporta consultas para elementos desconhecidos ou elementos numa localização desconhecida na estrutura do documento.

Exemplo de um índice XML seletivo

Considere o seguinte fragmento XML como um documento XML numa tabela de aproximadamente 500.000 linhas:

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

Criar um índice XML primário ao longo de tantas linhas deste esquema simples demora muito tempo. Consultar estes dados também sofre do facto de um índice XML primário não suportar indexação seletiva.

Se só precisar de consultar estes dados sobre o /book/title caminho e o /book/subjects caminho, pode criar o seguinte índice seletivo de XML:

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

A instrução anterior é um bom exemplo da sintaxe CREATE que utiliza quando cria um índice XML seletivo. Na instrução CREATE, primeiro fornece um nome para o índice e identifica a tabela e a coluna XML a indexar. Depois forneces os caminhos a indexar. Um caminho tem três partes:

  1. Um nome que identifica de forma única o caminho.

  2. Uma expressão XQuery que descreve o caminho.

  3. Dicas opcionais de otimização.

Para mais informações sobre estes elementos, consulte Tarefas Relacionadas.

Funcionalidades Suportadas, Pré-requisitos e Limitações

Funcionalidades XML suportadas

Índices XML seletivos suportam o XQuery suportado pelo SQL Server dentro dos métodos exist(), value() e nodes().

  • Para os exist()métodos , value() e nodes() , os índices XML seletivos contêm informação suficiente para transformar toda a expressão.

  • Para os métodos query() e modify(), os índices XML seletivos podem ser usados apenas para filtragem de nós.

  • Para o query() método, não são usados índices XML seletivos para obter resultados.

  • Para o modify() método, os índices seletivos XML não são usados para atualizar documentos XML.

Funcionalidades XML não suportadas

Índices XML seletivos não suportam as seguintes funcionalidades suportadas na implementação SQL Server de XML:

  • Indexação de nós com tipos XS complexos: tipos de união, tipos de sequência e tipos de lista.

  • Indexação de nós com tipos XS binários: por exemplo, base64Binary e hexBinary.

  • Especificar os nós a indexar com expressões XPath que contenham o carácter * curinga no final: Por exemplo, /a/b/c/*, /a//b/*, ou /a/b/*:c.

  • Indexando qualquer eixo que não seja filho, atributo ou descendente. O //<step> caso é permitido como caso especial.

  • Indexação de instruções e comentários de processamento XML.

  • Especificar e recuperar o identificador de um nó usando a função id().

Pré-requisitos

Os seguintes pré-requisitos devem existir antes de poder criar um índice XML seletivo sobre uma coluna XML numa tabela de utilizador:

  • Deve existir um índice agrupado na chave primária da tabela de utilizador.

  • A chave primária da tabela de utilizador está limitada a um tamanho de 128 bytes quando usada com índices XML seletivos.

  • A chave de agrupamento da tabela de utilizador está limitada a 15 colunas quando usada com índices XML seletivos.

Limitações

Requisitos gerais e limitações

  • Cada índice XML seletivo só pode ser criado numa única coluna XML
  • Não se pode criar um índice XML seletivo numa coluna que não seja XML
  • Cada coluna XML numa tabela pode ter apenas um índice seletivo de XML
  • Cada tabela pode ter até 249 índices XML seletivos.

Limitações nos objetos suportados

Não pode criar índices XML seletivos nos seguintes objetos:

  • Colunas XML numa vista
  • Variável de tabela com colunas XML
  • Variáveis de tipo XML
  • Colunas XML computadas
  • Colunas XML com uma profundidade superior a 128 nós aninhados.

Limitações de armazenamento

Existe um limite finito no número de nós do documento XML que podem ser adicionados ao índice. Um índice XML seletivo mapeia documentos XML para uma única tabela relacional. Portanto, não pode ter mais de 1024 colunas não nulas em qualquer linha da tabela. Além disso, muitas das limitações das colunas esparsas também se aplicam a índices XML seletivos, porque os índices usam colunas esparsas para armazenamento.

O número máximo de colunas não nulas suportadas numa dada linha depende do tamanho dos dados nas colunas:

  • No melhor dos casos, são suportadas 1024 colunas não nulas quando todas as colunas são de tipo bit.

  • No pior dos casos, apenas 236 colunas não-nulas são suportadas quando todas as colunas são objetos grandes do tipo varchar.

Índices XML seletivos utilizam internamente de uma a quatro colunas para cada caminho de nó indexado. O número total de nós que podem ser indexados varia entre 60 e várias centenas de nós, dependendo do tamanho real dos dados nos caminhos indexados.

  • No pior dos casos, quando alguns ou todos os nós são mapeados usando //, na definição do caminho do nó, o número máximo de nós indexados é 60.

  • Na melhor das hipóteses, quando os nós são mapeados sem usarem // na definição do caminho do nó, o número máximo de nós indexados é 200.

Índices XML seletivos são reconstruídos quando CRIAS ou ALTERAS o índice

Quando CRIAS ou ALTERAS um índice XML seletivo, este é reconstruído num modo single-threaded, offline. Frequentemente, as instruções ALTER afetam negativamente o desempenho das consultas sobre os documentos XML indexados.

Outras limitações

  • Índices XML seletivos não são suportados em sugestões de consulta.

  • Índices XML seletivos e índices XML seletivos secundários não são suportados no Database Tuning Advisor.

Consulte também