Partilhar via


CRIAR ÍNDICE XML (Transact-SQL)

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

Cria um índice XML numa tabela especificada. Um índice pode ser criado antes de haver dados na tabela. Índices XML podem ser criados em tabelas noutra base de dados especificando um nome de base de dados qualificado.

Observação

Para criar um índice relacional, veja CRIAR ÍNDICE (Transact-SQL). Para informações sobre como criar um índice espacial, veja CRIAR ÍNDICE ESPACIAL (Transact-SQL).

Transact-SQL convenções de sintaxe

Sintaxe

--Create XML Index   
CREATE [ PRIMARY ] XML INDEX index_name
    ON <object> ( xml_column_name )
    [ USING XML INDEX xml_index_name
        [ FOR { VALUE | PATH | PROPERTY } ] ]
    [ WITH ( <xml_index_option> [ ,...n ] ) ]
[ ; ]

<object> ::=
{ database_name.schema_name.table_name | schema_name.table_name | table_name }

<xml_index_option> ::=
{
    PAD_INDEX  = { ON | OFF }
  | FILLFACTOR = fillfactor
  | SORT_IN_TEMPDB = { ON | OFF }
  | IGNORE_DUP_KEY = OFF
  | DROP_EXISTING = { ON | OFF }
  | ONLINE = OFF
  | ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | XML_COMPRESSION = { ON | OFF }
}

Arguments

[PRIMÁRIO] XML

Cria um índice XML na coluna XML especificada. Quando o PRIMARY é especificado, é criado um índice agrupado com a chave agrupada formada pela chave de clustering da tabela de utilizador e um identificador de nó XML. Cada tabela pode ter até 249 índices XML. Note o seguinte ao criar um índice XML:

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

  • A chave de agrupamento da tabela de utilizador está limitada a 15 colunas.

  • Cada coluna xml numa tabela pode ter um índice XML primário e múltiplos índices XML secundários.

  • Deve existir um índice XML primário numa coluna xml antes de poder ser criado um índice XML secundário na coluna.

  • Um índice XML só pode ser criado numa única coluna xml . Não podes criar um índice XML numa coluna que não seja xml , nem podes criar um índice relacional numa coluna xml .

  • Não podes criar um índice XML, seja primário ou secundário, numa coluna xml numa vista, numa variável com valores de tabela com colunas xml ou variáveis do tipo xml .

  • Não podes criar um índice XML primário numa coluna XML computada.

  • As definições da opção SET devem ser as mesmas exigidas para vistas indexadas e índices de colunas calculados. Especificamente, a opção ARITHABORT deve ser definida para ON quando é criado um índice XML e ao inserir, eliminar ou atualizar valores na coluna xml .

Para obter mais informações, consulte Índices XML (SQL Server).

index_name

O nome do índice. Os nomes de índice devem ser exclusivos dentro de uma tabela, mas não precisam ser exclusivos dentro de um banco de dados. Os nomes dos índices devem seguir as regras dos identificadores.

Os nomes principais de índices XML não podem começar com os seguintes caracteres: #, ##, @, ou @@.

xml_column_name

A coluna xml em que se baseia o índice. Apenas uma coluna xml pode ser especificada numa única definição de índice XML; no entanto, podem ser criados múltiplos índices XML secundários numa coluna XML .

UTILIZAÇÃO xml_index_name DE ÍNDICE XML

Especifica o índice XML primário a usar na criação de um índice XML secundário.

PARA { VALOR | CAMINHO | PROPRIEDADE }

Especifica o tipo de índice XML secundário.

VALUE
Cria um índice XML secundário nas colunas onde as colunas-chave são (valor e caminho do nó) do índice XML primário.

CAMINHO
Cria um índice XML secundário em colunas construídas sobre valores de caminho e valores de nós no índice XML primário. No índice secundário PATH, os valores do caminho e do nó são colunas-chave que permitem buscas eficientes ao procurar caminhos.

PROPRIEDADE
Cria um índice XML secundário nas colunas (PK, valor do caminho e do nó) do índice XML primário, onde PK é a chave primária da tabela base.

<objeto>::=

O objeto totalmente qualificado ou não totalmente qualificado a ser indexado.

database_name
O nome do banco de dados.

schema_name
O nome do esquema ao qual a tabela pertence.

table_name
O nome da tabela a ser indexada.

<xml_index_option> ::=

Especifica as opções a serem usadas ao criar o índice.

PAD_INDEX = { EM | DESLIGADO }

Especifica o preenchimento do índice. O padrão é DESLIGADO.

ON
A percentagem de espaço livre especificada pelo fator de preenchimento é aplicada às páginas de nível intermédio do índice.

OFF ou fillfactor não são especificados
As páginas de nível intermediário são preenchidas até perto da capacidade, deixando espaço suficiente para pelo menos uma linha do tamanho máximo que o índice pode ter, considerando o conjunto de teclas nas páginas intermediárias.

A opção PAD_INDEX é útil apenas quando o FILLFACTOR é especificado, porque PAD_INDEX utiliza a percentagem especificada pelo FILLFACTOR. Se a percentagem especificada para o FILLFACTOR não for suficientemente grande para permitir uma linha, o Motor de Base de Dados anula internamente a percentagem para permitir o mínimo. O número de linhas numa página de índice intermédia nunca é inferior a duas, indiferente a quão baixo seja o valor do fator de preenchimento.

FILLFACTOR = fator de enchimento

Especifica uma porcentagem que indica o quão cheio o Mecanismo de Banco de Dados deve tornar o nível de folha de cada página de índice durante a criação ou reconstrução do índice. o fator de preenchimento deve ser um valor inteiro de 1 a 100. O padrão é 0. Se o fator de preenchimento for 100 ou 0, o Motor de Base de Dados cria índices com páginas folha preenchidas até à capacidade.

Observação

Os valores de fator de preenchimento 0 e 100 são os mesmos em todos os aspetos.

A definição FILLFACTOR aplica-se apenas quando o índice é criado ou reconstruído. O Mecanismo de Banco de Dados não mantém dinamicamente a porcentagem especificada de espaço vazio nas páginas. Para exibir a configuração do fator de preenchimento, use a vista do catálogo sys.indexes.

Importante

Criar um índice agrupado com um FILLFACTOR inferior a 100 afeta a quantidade de espaço de armazenamento que os dados ocupam porque o Motor de Base de Dados redistribui os dados ao criar o índice agrupado.

Para obter mais informações, consulte Especificar fator de preenchimento para um índice.

SORT_IN_TEMPDB = { EM | DESLIGADO }

Especifica se armazenar resultados temporários de ordenação em tempdb. O padrão é DESLIGADO.

ON
Os resultados intermédios de ordenação usados para construir o índice são armazenados em tempdb. Isto pode reduzir o tempo necessário para criar um índice se o tempdb estiver num conjunto diferente de discos do que a base de dados do utilizador. No entanto, isso aumenta a quantidade de espaço em disco que é usado durante a compilação do índice.

DESLIGADO
Os resultados da classificação intermediária são armazenados no mesmo banco de dados que o índice.

Além do espaço necessário na base de dados do utilizador para criar o índice, o tempdb deve ter aproximadamente a mesma quantidade de espaço adicional para armazenar os resultados intermédios de ordenação. Para mais informações, consulte SORT_IN_TEMPDB Opção para Índices.

IGNORE_DUP_KEY = DESLIGADO

Não tem efeito para índices XML porque o tipo de índice nunca é único. Não defina esta opção para LIGADO, caso contrário surge um erro.

DROP_EXISTING = { EM | DESLIGADO }

Especifica que o índice XML nomeado e pré-existente é eliminado e reconstruído. O padrão é DESLIGADO.

ON
O índice existente é descartado e reconstruído. O nome do índice especificado deve ser o mesmo que um índice existente no momento; no entanto, a definição do índice pode ser modificada. Por exemplo, você pode especificar colunas diferentes, ordem de classificação, esquema de partição ou opções de índice.

DESLIGADO
Um erro será exibido se o nome de índice especificado já existir.

O tipo de índice não pode ser alterado usando DROP_EXISTING. Além disso, um índice XML primário não pode ser redefinido como um índice XML secundário, ou vice-versa.

ONLINE = DESLIGADO

Especifica que as tabelas subjacentes e os índices associados não estão disponíveis para consultas e modificação de dados durante a operação de índice. Nesta versão do SQL Server, as compilações de índices online não são suportadas para índices XML. Se esta opção estiver definida como ON para um índice XML, surge um erro. Ou omite a opção ONLINE ou define ONLINE como DESLIGADO.

Uma operação de índice offline que cria, reconstrói ou elimina um índice XML adquire um bloqueio de modificação de esquema (Sch-M) na tabela. Isto impede todo o acesso do utilizador à tabela subjacente durante a operação.

Observação

As operações de índice online não estão disponíveis em todas as edições do Microsoft SQL Server. Para obter uma lista de funcionalidades suportadas pelas edições do SQL Server, consulte Edições e funcionalidades suportadas do SQL Server 2022.

ALLOW_ROW_LOCKS = { EM | DESLIGADO }

Especifica se os bloqueios de linha são permitidos. O padrão é LIGADO.

ON
Bloqueios de linha são permitidos ao acessar o índice. O Mecanismo de Banco de Dados determina quando os bloqueios de linha são usados.

DESLIGADO
Os bloqueios de linha não são usados.

ALLOW_PAGE_LOCKS = { EM | DESLIGADO }

Especifica se os bloqueios de página são permitidos. O padrão é LIGADO.

ON
Bloqueios de página são permitidos ao acessar o índice. O Mecanismo de Banco de Dados determina quando os bloqueios de página são usados.

DESLIGADO
Os bloqueios de página não são usados.

MAXDOP = max_degree_of_parallelism

Sobrepõe a opção Configurar o grau máximo de paralelismo Opção de Configuração do Servidor durante a operação de indexação. Use MAXDOP para limitar o número de processadores usados em uma execução de plano paralelo. O máximo é de 64 processadores.

Importante

Embora a opção MAXDOP seja sintaticamente suportada para todos os índices XML, para um índice XML primário, CREATE XML INDEX utiliza apenas um único processador.

max_degree_of_parallelism pode ser:

1
Suprime a geração de planos paralelos.

>1
Restringe o número máximo de processadores usados em uma operação de índice paralelo ao número especificado ou menos com base na carga de trabalho atual do sistema.

0 (padrão)
Usa o número real de processadores ou menos com base na carga de trabalho atual do sistema.

Para obter mais informações, consulte Configurar operações de índice paralelo.

Observação

Operações de índice paralelo não estão disponíveis em todas as edições do Microsoft SQL Server. Para obter uma lista de funcionalidades suportadas pelas edições do SQL Server, consulte Edições e funcionalidades suportadas do SQL Server 2022.

Observações

Colunas calculadas derivadas de tipos de dados xml podem ser indexadas como uma chave ou coluna não-chave incluída, desde que o tipo de dado da coluna calculada seja permitido como coluna de chave de índice ou coluna não-chave. Não podes criar um índice XML primário numa coluna XML computada.

Para visualizar informações sobre índices XML, utilize a vista de catálogo sys.xml_indexes .

Para mais informações sobre índices XML, consulte Índices XML (SQL Server).

Compactação XML

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores, Banco de Dados SQL do Azure e Instância Gerenciada SQL do Azure.

  • Os índices XML não herdam a propriedade de compactação da tabela. Para compactar índices, você deve habilitar explicitamente a compactação XML em índices XML.
  • Os índices XML secundários não herdam a propriedade de compressão do índice XML primário.
  • Por padrão, a configuração de compactação XML para índices XML é definida como OFF quando o índice é criado.

Observações adicionais sobre a criação de índices

Para mais informações sobre a criação de índices, consulte a secção "Observações" no CREATE INDEX (Transact-SQL).

Examples

Os exemplos de código neste artigo usam o banco de dados de exemplo AdventureWorks2025 ou AdventureWorksDW2025, que pode ser descarregado da página inicial de Exemplos e Projetos da Comunidade do Microsoft SQL Server.

A. Criação de um índice XML primário

O exemplo seguinte cria um índice XML primário na CatalogDescription coluna da Production.ProductModel tabela.

IF EXISTS (SELECT * FROM sys.indexes
            WHERE name = N'PXML_ProductModel_CatalogDescription')
    DROP INDEX PXML_ProductModel_CatalogDescription
        ON Production.ProductModel;  
GO  
CREATE PRIMARY XML INDEX PXML_ProductModel_CatalogDescription
    ON Production.ProductModel (CatalogDescription);  
GO

B. Criação de um índice XML primário com compressão XML

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores, Banco de Dados SQL do Azure e Instância Gerenciada SQL do Azure.

O exemplo seguinte cria um índice XML primário na CatalogDescription coluna da Production.ProductModel tabela.

IF EXISTS (SELECT * FROM sys.indexes
            WHERE name = N'PXML_ProductModel_CatalogDescription')
    DROP INDEX PXML_ProductModel_CatalogDescription
        ON Production.ProductModel;  
GO  
CREATE PRIMARY XML INDEX PXML_ProductModel_CatalogDescription
    ON Production.ProductModel (CatalogDescription)
    WITH (XML_COMPRESSION = ON);  
GO

C. Criação de um índice XML secundário

O exemplo seguinte cria um índice XML secundário na CatalogDescription coluna da Production.ProductModel tabela.

IF EXISTS (SELECT name FROM sys.indexes
            WHERE name = N'IXML_ProductModel_CatalogDescription_Path')
    DROP INDEX IXML_ProductModel_CatalogDescription_Path
        ON Production.ProductModel;  
GO  
CREATE XML INDEX IXML_ProductModel_CatalogDescription_Path
    ON Production.ProductModel (CatalogDescription)
    USING XML INDEX PXML_ProductModel_CatalogDescription FOR PATH ;
GO

D. Criação de um índice XML secundário com compressão XML

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores, Banco de Dados SQL do Azure e Instância Gerenciada SQL do Azure.

O exemplo seguinte cria um índice XML secundário na CatalogDescription coluna da Production.ProductModel tabela.

IF EXISTS (SELECT name FROM sys.indexes
            WHERE name = N'IXML_ProductModel_CatalogDescription_Path')
    DROP INDEX IXML_ProductModel_CatalogDescription_Path
        ON Production.ProductModel;  
GO  
CREATE XML INDEX IXML_ProductModel_CatalogDescription_Path
    ON Production.ProductModel (CatalogDescription)
    USING XML INDEX PXML_ProductModel_CatalogDescription FOR PATH
    WITH (XML_COMPRESSION = ON);
GO

Consulte também