Compartilhar via


Índice XML primário

O índice XML primário indexa todas as marcas, valores e caminhos dentro das instâncias XML em uma coluna XML. Para criar um índice XML primário, a tabela na qual a coluna XML ocorre deve ter um índice clusterizado na chave primária da tabela. O SQL Server usa essa chave primária para correlacionar linhas no índice XML primário com linhas na tabela que contêm a coluna XML.

Um índice XML primário é uma representação fragmentada e persistente dos BLOBs XML na coluna de tipo de dados xml. Para cada BLOB (objeto binário grande) XML na coluna, o índice cria várias linhas de dados. O número de linhas no índice é aproximadamente igual ao número de nós no objeto binário grande XML. Quando uma consulta recupera a instância XML completa, o SQL Server fornece a instância da coluna XML. As consultas dentro de instâncias XML usam o índice XML primário e podem retornar valores escalares ou subárvores XML usando o próprio índice.

Cada linha armazena as seguintes informações de nó:

  • Nome da marca, como um nome de atributo ou elemento.

  • Valor do nó.

  • Tipo de nó, como um nó de elemento, nó de atributo ou nó de texto.

  • Informações de ordem do documento representada por um identificador de nó interno.

  • Caminho de cada nó para a raiz da árvore XML. Essa coluna é pesquisada para expressões de caminho na consulta.

  • Chave primária da tabela base. A chave primária da tabela base é duplicada no índice XML primário para uma junção retroativa com a tabela base, e o número máximo de colunas na chave primária da tabela base é limitado a 15.

Essas informações de nó são usadas para avaliar e construir resultados XML para uma consulta especificada. Para fins de otimização, as informações de nome da marca e de tipo de nó são codificadas como valores inteiros e a coluna Path usa a mesma codificação. Além disso, caminhos são armazenados em ordem inversa para permitir correspondência de caminhos quando apenas o sufixo do caminho é conhecido. Por exemplo:

  • //ContactRecord/PhoneNumber em que apenas as duas últimas etapas são conhecidas

OU

  • /Book/*/Title em que o caractere curinga (*) é especificado no meio da expressão.

O processador de consultas usa índice XML primário para consultas que envolvem Métodos de tipo de dados xml e retorna valores escalares ou as subárvores XML do próprio índice primário. (Esse índice armazena todas as informações necessárias para reconstruir a instância XML.)

Por exemplo, a consulta a seguir retorna informações resumidas armazenadas na coluna CatalogDescription de tipo xml na tabela ProductModel. A consulta retorna informações de <Summary> apenas para modelos de produto cuja descrição de catálogo também armazena a descrição de <Features>.

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

SELECT CatalogDescription.query('
  /PD:ProductDescription/PD:Summary
') as Result
FROM Production.ProductModel
WHERE CatalogDescription.exist ('/PD:ProductDescription/PD:Features') = 1

Com relação ao índice XML primário, em vez de fragmentar cada instância de objeto binário grande XML na tabela base, as linhas no índice que correspondem a cada objeto binário grande XML são pesquisadas sequencialmente para a expressão especificada no método exist(). Se o caminho for encontrado na coluna Path no índice, o elemento <Summary> juntamente com suas subárvores será recuperado do índice XML primário e convertido em um objeto binário grande XML como o resultado do método query().

Observe que o índice XML primário não é usado ao recuperar uma instância XML completa. Por exemplo, a consulta a seguir recupera da tabela toda a instância XML que descreve as instruções de fabricação para um modelo de produto específico.

USE AdventureWorks2008R2;

SELECT Instructions
FROM Production.ProductModel 
WHERE ProductModelID=7;

Consulte também

Conceitos