Desabilitando índices

A desabilitação de um índice impede o acesso do usuário ao índice, e para índices clusterizados, aos dados da tabela subjacente. A definição do índice permanece nos metadados e as estatísticas do índice são mantidas em índices não-clusterizados. A desabilitação de um índice não-clusterizado ou cluster em uma exibição exclui fisicamente os dados do índice. A desabilitação de um índice clusterizado em uma tabela impede o acesso aos dados; os dados ainda permanecem na tabela, mas estão indisponíveis para operações de DML até que o índice seja descartado ou recriado. Para recriar e habilitar um índice desabilitado, use a instrução ALTER INDEX REBUILD ou CREATE INDEX WITH DROP_EXISTING.

Um ou mais índices podem ser desabilitados nas seguintes circunstâncias:

  • O Mecanismo de banco de dados do SQL Server desabilita o índice automaticamente durante uma atualização do SQL Server.

  • Você desabilita manualmente o índice usando ALTER INDEX.

Atualização do SQL Server desabilita um índice

Durante uma atualização para uma nova versão ou service pack do SQL Server, o Mecanismo de Banco de Dados automaticamente identifica e desabilita um índice, inclusive os índices em exibições, quando o índice ou a definição de exibição contiver:

  • Uma expressão para a qual o Mecanismo de Banco de Dados já não pode garantir a integridade de dados do índice.

    Por exemplo, considere que um índice usa uma função de sistema e essa função foi alterada na atualização de modo que agora retorna um resultado diferente. O Mecanismo de Banco de Dados desabilitará o índice durante a atualização porque ele pode conter dados inválidos após a atualização.

  • Um agrupamento que foi alterado como parte da atualização de modo que o índice já não está classificado corretamente.

Quando um índice for desabilitado durante o processo de atualização, uma mensagem de aviso exibirá o nome do índice e o nomes de qualquer restrição associada para que você possa recriá-los após o término da atualização. A recriação do índice e habilitação de quaisquer restrições corrigirá os dados invalidados durante a atualização.

Uma restrição CHECK poderá ser desabilitada caso a definição contenha uma expressão para a qual o Mecanismo de Banco de Dados já não puder garantir a integridade dos dados. Para habilitar a restrição, use a instrução ALTER TABLE CHECK.

Usando ALTER INDEX para desabilitar um índice

Você pode desabilitar manualmente um índice a qualquer momento usando a instrução ALTER INDEX DISABLE.

ObservaçãoObservação

Se uma tabela estiver em uma publicação de replicação transacional, você não poderá desabilitar nenhum índice associado a colunas de chave primária. Esses índices são necessários para a replicação. Para desabilitar um índice, você deve primeiramente descartar a tabela da publicação. Para obter mais informações, consulte Publicando dados e objetos de banco de dados.

Você pode querer desabilitar um índice para executar o seguinte:

  • Corrigir um erro de E/S do disco (erro 823 ou 824) em uma página de índice e recriar o índice posteriormente.

  • Remover o índice temporariamente para fins de solução de problemas.

  • Recriar índices não-clusterizados.

    Quando um índice não-clusterizado não é desabilitado, a operação de recriação exige espaço em disco temporário suficiente para armazenar o índice antigo e o novo. Porém, ao desabilitar e recriar um índice não-clusterizado em transações separadas, o espaço em disco disponível pela desabilitação do índice poderá ser reutilizado pela recriação subseqüente ou qualquer outra operação. Nenhum espaço adicional é exigido, com exceção do espaço em disco temporário para classificação; este geralmente é de 20 por cento do tamanho do índice.

    Se o espaço em disco for limitado, isso pode ser útil para desabilitar o índice não-clusterizado antes da recriação. Por exemplo, você tem um procedimento armazenado que recria todos os índices não-clusterizados em uma ou mais tabelas. Ao desabilitar esses índices primeiro em uma transação separada da operação de recriação, você poderá reduzir significativamente a quantidade de espaço em disco temporário para recriá-los.

Para desabilitar um índice

ALTER INDEX (Transact-SQL)

Como recriar um índice (SQL Server Management Studio)