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