Índices em colunas de tipo de dados XML

Índices XML podem ser criados em colunas de tipo de dados xml. Eles indexam todas as marcas, valores e caminhos através das instâncias XML na coluna e se beneficiam do desempenho das consultas. Seu aplicativo pode se beneficiar de um índice XML nas seguintes situações:

  • Consultas em colunas XML são comuns em sua carga de trabalho. O custo da manutenção de índices XML durante a modificação de dados deve ser considerado.

  • Seus valores XML são relativamente grandes e as partes recuperadas são relativamente pequenas. A construção de índices evita a análise de todos os dados em tempo de execução e beneficia pesquisas de índice para processamento eficiente de consultas.

Índices XML se encaixam nas seguintes categorias:

  • Índice XML primário

  • Índice XML secundário

O primeiro índice na coluna de tipo xml deve ser o índice XML primário. Usando o índice de XML primário, os seguintes tipos de índices secundários têm suporte: PATH, VALUE e PROPERTY. Dependendo do tipo de consulta, esses índices secundários podem ajudar a melhorar o desempenho de consultas.

ObservaçãoObservação

Não é possível criar ou modificar um índice XML a menos que as opções do banco de dados estejam definidas corretamente para trabalhar com o tipo de dados xml. Para obter mais informações, consulte Índice de texto completo em uma coluna XML.

Instâncias XML são armazenadas em colunas de tipo xml como BLOBs (objetos binários grandes). Essas instâncias XML podem ser grandes e a representação binária armazenada de instâncias de tipo de dados xml pode ser de até 2 GB. Sem um índice, esses objetos binários grandes são fragmentados em tempo de execução para avaliar uma consulta. Essa fragmentação pode ser demorada. Por exemplo, considere a consulta a seguir:

WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS "PD")

SELECT CatalogDescription.query('
  /PD:ProductDescription/PD:Summary
') as Result
FROM Production.ProductModel
WHERE CatalogDescription.exist ('/PD:ProductDescription/@ProductModelID[.="19"]') = 1

Para selecionar as instâncias XML que atendem à condição na cláusula WHERE, o BLOB (objeto binário grande) XML em cada linha da tabela Production.ProductModel é fragmentado em tempo de execução. Em seguida, a expressão (/PD:ProductDescription/@ProductModelID[.="19"]) no método exist() é avaliada. Essa fragmentação em tempo de execução pode ser dispendiosa dependendo do tamanho e do número de instâncias armazenadas na coluna.

Se a consulta de BLOBs XML for comum no ambiente do seu aplicativo, a indexação de colunas de tipo xml ajudará. No entanto há um custo associado à manutenção do índice durante a modificação de dados.

Nesta seção

Tópico

Descrição

Índice XML primário

Descreve o índice XML primário e suas linhas.

Índices XML secundários

Descreve os três tipos de índices XML secundários.

Criando índices XML

Descreve como criar índices XML primários e secundários.

Modificando índices XML

Descreve como usar a instrução ALTER INDEX para modificar índices XML.

Descartando índices XML

Descreve como usar a instrução DROP INDEX para descartar índices.

Índice de texto completo em uma coluna XML

Descreve como criar um índice de texto completo em colunas XML.