Partilhar via


TABELA ALTER index_option (Transact-SQL)

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

Especifica um conjunto de opções que podem ser aplicadas a um índice que faz parte de uma definição de restrição criada usando ALTER TABLE.

Para obter uma descrição completa das opções de índice, consulte CREATE INDEX.

Transact-SQL convenções de sintaxe

Syntax

{
    PAD_INDEX = { ON | OFF }
  | FILLFACTOR = fillfactor
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { ON | OFF }
  | ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS = { ON | OFF }
  | OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | OFF }
  | SORT_IN_TEMPDB = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }
      [ ON PARTITIONS ( { <partition_number_expression> | <range> }
      [ , ...n ] ) ]
  | XML_COMPRESSION = { ON | OFF }
      [ ON PARTITIONS ( { <partition_number_expression> | <range> }
      [ , ...n ] ) ]
  | ONLINE = { ON | OFF }
  | RESUMABLE = { ON | OFF }
  | MAX_DURATION = <time> [ MINUTES ]
}

<range> ::=
<partition_number_expression> TO <partition_number_expression>

<single_partition_rebuild__option> ::=
{
    SORT_IN_TEMPDB = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE } }
  | ONLINE = { ON [ ( <low_priority_lock_wait> ) ] | OFF }
}

<low_priority_lock_wait>::=
{
    WAIT_AT_LOW_PRIORITY ( MAX_DURATION = <time> [ MINUTES ] ,
                           ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS } )
}

Arguments

PAD_INDEX = { EM | DESLIGADO }

Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores

Especifica o preenchimento do índice. A predefinição é OFF.

  • ON

    A porcentagem de espaço livre especificada por FILLFACTOR é aplicada às páginas de nível intermediário do índice.

  • A de fator de preenchimento OFF ou não é especificada

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

FILLFACTOR = fator de enchimento

Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores

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 alteração do índice. O valor especificado deve ser um valor inteiro de 1 a 100. O padrão é 0.

Note

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

IGNORE_DUP_KEY = { EM | DESLIGADO }

Especifica o tipo de resposta quando uma operação de inserção tenta inserir valores de chave duplicados em um índice exclusivo. A opção IGNORE_DUP_KEY aplica-se apenas a operações de inserção depois que o índice é criado ou reconstruído. A opção não tem efeito ao executar CREATE INDEX, ALTER INDEXou UPDATE. A predefinição é OFF.

  • ON

    Uma mensagem de aviso ocorre quando valores de chave duplicados são inseridos em um índice exclusivo. Apenas as linhas que violam a restrição de exclusividade falham.

  • OFF

    Uma mensagem de erro ocorre quando valores de chave duplicados são inseridos em um índice exclusivo. Toda a operação INSERT é revertida.

IGNORE_DUP_KEY não pode ser definido como ON para índices criados em um modo de exibição, índices não exclusivos, índices XML, índices espaciais e índices filtrados.

Para exibir IGNORE_DUP_KEY, use sys.indexes.

Na sintaxe compatível com versões anteriores, WITH IGNORE_DUP_KEY é equivalente a WITH IGNORE_DUP_KEY = ON.

STATISTICS_NORECOMPUTE = { LIGADO | DESLIGADO }

Desative ou habilite a opção de atualização automática de estatísticas, AUTO_STATISTICS_UPDATE, para as estatísticas relacionadas aos índices especificados. A predefinição é OFF.

  • ON

    As atualizações automáticas de estatísticas são desativadas depois que o índice é reconstruído.

  • OFF

    As atualizações automáticas de estatísticas são ativadas depois que o índice é reconstruído.

Para restaurar a atualização automática de estatísticas, defina o STATISTICS_NORECOMPUTE como OFFou execute-UPDATE STATISTICS sem a cláusula NORECOMPUTE.

Warning

Se você desabilitar a atualização automática de estatísticas, isso poderá impedir que o Otimizador de Consultas escolha planos de execução ideais para consultas que envolvem a tabela. Você deve usar essa opção com moderação e somente por um administrador de banco de dados qualificado.

Essa configuração não impede uma atualização automática com verificação completa das estatísticas relacionadas ao índice, durante a operação de reconstrução.

ALLOW_ROW_LOCKS = { EM | DESLIGADO }

Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores

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

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

  • OFF

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

ALLOW_PAGE_LOCKS = { EM | DESLIGADO }

Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores

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

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

  • OFF

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

OTIMIZE_FOR_SEQUENTIAL_KEY = { EM | DESLIGADO }

Aplica-se a: SQL Server 2019 (15.x) e versões posteriores

Especifica se a contenção de inserção da última página deve ou não ser otimizada. A predefinição é OFF. Para obter mais informações, consulte a seção Chaves sequenciais do CREATE INDEX artigo.

SORT_IN_TEMPDB = { EM | DESLIGADO }

Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores

Especifica se os resultados de classificação devem ser armazenados no tempdb. A predefinição é OFF.

  • ON

    Os resultados de classificação intermediária usados para criar o índice são armazenados em tempdb. Isso pode reduzir o tempo necessário para criar um índice se tempdb estiver em um conjunto de discos diferente do banco de dados do usuário. No entanto, isso aumenta a quantidade de espaço em disco que é usado durante a compilação do índice.

  • OFF

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

ONLINE = { LIGADO | DESLIGADO }

Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores

Especifica se as tabelas subjacentes e os índices associados estão disponíveis para consultas e modificação de dados durante a operação de índice. A predefinição é OFF. REBUILD pode ser realizada como uma ONLINE operação.

Note

Não é possível criar índices exclusivos não clusterizados online. Isso inclui índices criados devido a uma UNIQUE ou PRIMARY KEY restrição.

  • ON

    Os bloqueios de tabela de longo prazo não são mantidos durante a operação de índice. Durante a fase principal da operação de índice, apenas um bloqueio de compartilhamento de intenção (IS) é mantido na tabela de origem. Isso permite que as consultas ou atualizações da tabela e dos índices subjacentes prossigam. No início da operação, um bloqueio Shared (S) é mantido no objeto de origem por um curto período de tempo. No final da operação, por um curto período de tempo, um bloqueio S (compartilhado) é adquirido na origem se um índice não clusterizado estiver sendo criado; ou um bloqueio Sch-M (Modificação de Esquema) é adquirido quando um índice clusterizado é criado ou descartado online e quando um índice clusterizado ou não clusterizado está sendo reconstruído. Embora os bloqueios de índice online sejam bloqueios de metadados curtos, especialmente o bloqueio de Sch-M deve aguardar que todas as transações de bloqueio sejam concluídas nesta tabela. Durante o tempo de espera, o bloqueio Sch-M bloqueia todas as outras transações que aguardam atrás desse bloqueio ao acessar a mesma tabela. ONLINE não pode ser definido como ON quando um índice está sendo criado em uma tabela temporária local.

    Note

    A reconstrução do índice online pode definir as opções de low_priority_lock_wait descritas mais adiante nesta seção. low_priority_lock_wait gerencia a prioridade de bloqueio S e Sch-M durante a reconstrução do índice online.

  • OFF

    Os bloqueios de tabela são aplicados durante a operação de índice. Isso impede todo o acesso do usuário à tabela subjacente durante a operação. Uma operação de índice offline que cria, reconstrói ou descarta um índice clusterizado, ou recria ou descarta um índice não clusterizado, adquire um bloqueio de modificação de esquema (Sch-M) na tabela. Isso impede todo o acesso do usuário à tabela subjacente durante a operação. Uma operação de índice offline que cria um índice não clusterizado adquire um bloqueio Compartilhado (S) na tabela. Isso impede atualizações na tabela subjacente, mas permite operações de leitura, como SELECT instruções.

Para obter mais informações, consulte Como funcionam as operações de índice on-line.

Note

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.

RESUMÍVEL = { EM | DESLIGADO}

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores

Especifica se uma operação de ALTER TABLE ADD CONSTRAINT é retomável. Adicionar operação de restrição de tabela é retomável quando ON. Adicionar operação de restrição de tabela não é retomada quando OFF. A predefinição é OFF. Quando a RESUMABLE opção é definida como ON, a opção ONLINE = ON é necessária.

MAX_DURATION quando usado com RESUMABLE = ON (requires ONLINE = ON) indica o tempo (um valor inteiro especificado em minutos) em que uma operação de restrição de adição online retomável é executada antes de ser pausada. Se não for especificado, a operação continua até a conclusão. MAXDOP é suportado com RESUMABLE = ON também.

Para obter mais informações sobre como habilitar e usar operações retomáveis ALTER TABLE ADD CONSTRAINT , consulte Resumable add table constraints.

MAXDOP = max_degree_of_parallelism

Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores

Substitui a opção de configuração do grau máximo de paralelismo durante a operação do índice. Para obter mais informações, consulte Configurar o grau máximo de paralelismo (opção de configuração do servidor). Use MAXDOP para limitar o número de processadores usados em uma execução de plano paralelo. O máximo é de 64 processadores.

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

Note

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

DATA_COMPRESSION

Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores

Especifica a opção de compactação de dados para a tabela especificada, o número da partição ou o intervalo de partições. As opções são as seguintes:

  • NONE

    As partições de tabela ou especificadas não são compactadas. Aplica-se apenas a tabelas de armazenamento de linhas; Não se aplica a tabelas columnstore.

  • ROW

    As partições de tabela ou especificadas são compactadas usando a compactação de linha. Aplica-se apenas a tabelas de armazenamento de linhas; Não se aplica a tabelas columnstore.

  • PAGE

    As partições de tabela ou especificadas são compactadas usando a compactação de página. Aplica-se apenas a tabelas de armazenamento de linhas; Não se aplica a tabelas columnstore.

  • COLUMNSTORE

    Aplica-se a: SQL Server 2014 (12.x) e versões posteriores

    Aplica-se somente a tabelas columnstore. COLUMNSTORE Especifica para descompactar uma partição que foi compactada com a COLUMNSTORE_ARCHIVE opção. Quando os dados são restaurados, o COLUMNSTORE índice continua a ser compactado com a compactação columnstore que é usada para todas as tabelas columnstore.

  • COLUMNSTORE_ARCHIVE

    Aplica-se a: SQL Server 2014 (12.x) e versões posteriores

    Aplica-se somente a tabelas columnstore, que são tabelas armazenadas com um índice columnstore clusterizado. COLUMNSTORE_ARCHIVE compacta ainda mais a partição especificada para um tamanho menor. Isso pode ser usado para arquivamento ou para outras situações que exigem menos armazenamento e podem dar mais tempo para armazenamento e recuperação

Para obter mais informações sobre compactação, consulte Compactação de dados.

XML_COMPRESSION

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.

Especifica a opção de compactação XML para qualquer colunas de tipo de dados xml na tabela. As opções são as seguintes:

  • ON

    As colunas que usam o tipo de dados xml são compactadas.

  • OFF

    As colunas que usam o tipo de dados xml não são compactadas.

EM PARTIÇÕES ( { <partition_number_expression> | <intervalo> } [ ,...n ] )

Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores

Especifica as partições às quais as configurações de DATA_COMPRESSION ou XML_COMPRESSION se aplicam. Se a tabela não estiver particionada, o argumento ON PARTITIONS gerará um erro. Se a ON PARTITIONS cláusula não for fornecida, a DATA_COMPRESSION opção ou XML_COMPRESSION se aplicará a todas as partições de uma tabela particionada.

<partition_number_expression> podem ser especificados das seguintes formas:

  • Forneça o número de uma partição, por exemplo: ON PARTITIONS (2).
  • Forneça os números de partição para várias partições individuais separadas por vírgulas, por exemplo: ON PARTITIONS (1, 5).
  • Forneça intervalos e partições individuais, por exemplo: ON PARTITIONS (2, 4, 6 TO 8).

<range> podem ser especificados como números de partição separados pela palavra TO, por exemplo: ON PARTITIONS (6 TO 8).

Para definir diferentes tipos de compactação de dados para partições diferentes, especifique a opção DATA_COMPRESSION mais de uma vez, por exemplo:

--For rowstore tables
REBUILD WITH
(
  DATA_COMPRESSION = NONE ON PARTITIONS (1),
  DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8),
  DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5)
)

--For columnstore tables
REBUILD WITH
(
  DATA_COMPRESSION = COLUMNSTORE ON PARTITIONS (1, 3, 5),
  DATA_COMPRESSION = COLUMNSTORE_ARCHIVE ON PARTITIONS (2, 4, 6 TO 8)
)

<single_partition_rebuild__option>

Na maioria dos casos, a reconstrução de um índice também reconstrói todas as partições de um índice particionado. As opções a seguir, quando aplicadas a uma única partição, não reconstroem todas as partições.

  • SORT_IN_TEMPDB
  • MAXDOP
  • DATA_COMPRESSION
  • XML_COMPRESSION

low_priority_lock_wait

Aplica-se a: SQL Server 2014 (12.x) e versões posteriores

A reconstrução de um SWITCH índice ou online é concluída assim que não houver operações de bloqueio para esta tabela. WAIT_AT_LOW_PRIORITY indica que, se a operação de reconstrução de SWITCH índice ou online não puder ser concluída imediatamente, ela aguardará. A operação mantém bloqueios de baixa prioridade, permitindo que outras operações que mantêm bloqueios em conflito com a instrução DDL prossigam. Omitir a opção WAIT AT LOW PRIORITY é equivalente a WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE).

MAX_DURATION = tempo [ MINUTOS ]

O tempo de espera (um valor inteiro especificado em minutos) que o bloqueio de reconstrução do SWITCH índice online que deve ser adquirido aguarda ao executar o comando DDL. A SWITCH operação de reconstrução de índice on-line ou tenta ser concluída imediatamente. Se a operação estiver bloqueada por algum MAX_DURATION tempo, uma das ABORT_AFTER_WAIT ações será executada. MAX_DURATION tempo é sempre em minutos, e a palavra MINUTES pode ser omitida.

ABORT_AFTER_WAIT = { NENHUM | PRÓPRIO | BLOQUEADORES }

  • NONE

    Continua a operação de reconstrução do SWITCH índice on-line sem alterar a prioridade de bloqueio (usando a prioridade regular).

  • SELF

    Sai da operação DDL de reconstrução de índice on-line que está sendo executada SWITCH no momento sem tomar nenhuma ação.

  • BLOCKERS

    Mata todas as transações do usuário que bloqueiam atualmente a operação DDL de reconstrução do SWITCH índice on-line para que a operação possa continuar.

    BLOCKERS requer a ALTER ANY CONNECTION permissão.