Desabilitar índices e restriçõesDisable Indexes and Constraints

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Este tópico descreve como desabilitar um índice ou restrições no SQL Server 2019SQL Server 2019 usando o SQL Server Management StudioSQL Server Management Studio ou o Transact-SQLTransact-SQL.This topic describes how to disable an index or constraints in SQL Server 2019SQL Server 2019 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. A desabilitação de um índice impede que o usuário o acesse, e que índices clusterizados acessem os dados da tabela subjacente.Disabling an index prevents user access to the index, and for clustered indexes to the underlying table data. A definição do índice permanece nos metadados e as estatísticas do índice são mantidas em índices não clusterizados.The index definition remains in metadata, and index statistics are kept on nonclustered indexes. A desabilitação de um índice não clusterizado ou clusterizado em uma exibição exclui fisicamente os dados do índice.Disabling a nonclustered or clustered index on a view physically deletes the index data. A desabilitação de um índice clusterizado em uma tabela impede o acesso aos dados; os dados ainda permanecem na tabela, mas ficam indisponíveis para operações DML (linguagem de manipulação de dados) até que o índice seja descartado ou recriado.Disabling a clustered index on a table prevents access to the data; the data still remains in the table, but is unavailable for data manipulation language (DML) operations until the index is dropped or rebuilt.

Neste tópicoIn This Topic

Antes de começarBefore You Begin

Limitações e restriçõesLimitations and Restrictions

  • O índice não é mantido enquanto estiver desabilitado.The index is not maintained while it is disabled.

  • O otimizador de consulta não considera o índice desabilitado ao criar planos de execução de consulta.The query optimizer does not consider the disabled index when creating query execution plans. As consultas que referenciam o índice desabilitado com uma dica de tabela também falham.Also, queries that reference the disabled index with a table hint fail.

  • Você não pode criar um índice que usa o mesmo nome que um índice desabilitado existente.You cannot create an index that uses the same name as an existing disabled index.

  • Um índice desabilitado pode ser cancelado.A disabled index can be dropped.

  • Ao desabilitar um índice exclusivo, a restrição PRIMARY KEY ou UNIQUE e todas as restrições FOREIGN KEY que referenciam as colunas indexadas de outras tabelas também são desabilitadas.When disabling a unique index, the PRIMARY KEY or UNIQUE constraint and all FOREIGN KEY constraints that reference the indexed columns from other tables are also disabled. Ao desabilitar um índice clusterizado, todas as restrições FOREIGN KEY de entrada e saída na tabela subjacente também são desabilitadas.When disabling a clustered index, all incoming and outgoing FOREIGN KEY constraints on the underlying table are also disabled. Os nomes das restrições são listados em uma mensagem de aviso quando o índice é desabilitado.The constraint names are listed in a warning message when the index is disabled. Depois de recompilar o índice, todas as restrições devem ser habilitadas manualmente usando a instrução ALTER TABLE CHECK CONSTRAINT.After rebuilding the index, all constraints must be manually enabled by using the ALTER TABLE CHECK CONSTRAINT statement.

  • Os índices não clusterizados são desabilitados automaticamente quando o índice clusterizado associado é desabilitado.Nonclustered indexes are automatically disabled when the associated clustered index is disabled. Eles não podem ser habilitados até o índice clusterizado na tabela ou exibição ser habilitado ou o índice clusterizado na tabela for cancelado.They cannot be enabled until either the clustered index on the table or view is enabled or the clustered index on the table is dropped. Os índices não clusterizados devem ser explicitamente habilitados, a menos que o índice clusterizado tenha sido habilitado usando a instrução ALTER INDEX ALL REBUILD.Nonclustered indexes must be explicitly enabled, unless the clustered index was enabled by using the ALTER INDEX ALL REBUILD statement.

  • A instrução ALTER INDEX ALL REBUILD recompila e habilita todos os índices desabilitados na tabela, com exceção dos índices desabilitados nas exibições.The ALTER INDEX ALL REBUILD statement rebuilds and enables all disabled indexes on the table, except for disabled indexes on views. Os índices em exibições devem ser habilitados em uma instrução ALTER INDEX ALL REBUILD separada.Indexes on views must be enabled in a separate ALTER INDEX ALL REBUILD statement.

  • Desabilitar um índice clusterizado em uma tabela também desabilita todos os índices clusterizados e não clusterizados em exibições que referenciam essa tabela.Disabling a clustered index on a table also disables all clustered and nonclustered indexes on views that reference that table. Esses índices devem ser recompilados da mesma maneira que aqueles da tabela referenciada.These indexes must be rebuilt just as those on the referenced table.

  • As linhas de dados do índice clusterizado desabilitado não podem ser acessadas, exceto para cancelar ou recompilar o índice clusterizado.The data rows of the disabled clustered index cannot be accessed except to drop or rebuild the clustered index.

  • Você pode recompilar um índice não clusterizado desabilitado online quando a tabela não tiver um índice clusterizado desabilitado.You can rebuild a disabled nonclustered index online when the table does not have a disabled clustered index. Porém, sempre precisará recompilar um índice clusterizado desabilitado offline se você usar a instrução ALTER INDEX REBUILD ou CREATE INDEX WITH DROP_EXISTING.However, you must always rebuild a disabled clustered index offline if you use either the ALTER INDEX REBUILD or CREATE INDEX WITH DROP_EXISTING statement. Para obter mais informações sobre operações de índice online, consulte Executar operações de índice online.For more information about online index operations, see Perform Index Operations Online.

  • A instrução CREATE STATISTICS não pode ser executada com êxito em uma tabela que tem um índice clusterizado desabilitado.The CREATE STATISTICS statement cannot be successfully executed on a table that has a disabled clustered index.

  • A opção de banco de dados AUTO_CREATE_STATISTICS cria novas estatísticas em uma coluna quando o índice é desabilitado e existem as seguintes condições:The AUTO_CREATE_STATISTICS database option creates new statistics on a column when the index is disabled and the following conditions exist:

    • AUTO_CREATE_STATISTICS é definido como ONAUTO_CREATE_STATISTICS is set to ON

    • Não há nenhuma estatística existente para a coluna.There are no existing statistics for the column.

    • As estatísticas são exigidas durante a otimização da consulta.Statistics are required during query optimization.

  • Se um índice clusterizado for desabilitado, DBCC CHECKDB não poderá retornar informações sobre a tabela subjacente. Em vez disso, a instrução reportará que o índice clusterizado está desabilitado.If a clustered index is disabled, DBCC CHECKDB cannot return information about the underlying table; instead, the statement reports that the clustered index is disabled. DBCC INDEXDEFRAG não pode ser usado para desfragmentar um índice desabilitado; a instrução falha com uma mensagem de erro.DBCC INDEXDEFRAG cannot be used to defragment a disabled index; the statement fails with an error message. Você pode usar DBCC DBREINDEX para recriar um índice desabilitado.You can use DBCC DBREINDEX to rebuild a disabled index.

  • Criar um novo índice clusterizado habilita índices não clusterizados previamente desabilitados.Creating a new clustered index enables previously disabled nonclustered indexes. Para obter mais informações, consulte Enable Indexes and Constraints.For more information, see Enable Indexes and Constraints.

SegurançaSecurity

PermissõesPermissions

Para executar ALTER INDEX, no mínimo, a permissão ALTER na tabela ou exibição é necessária.To execute ALTER INDEX, at a minimum, ALTER permission on the table or view is required.

Usando o SQL Server Management StudioUsing SQL Server Management Studio

Para desabilitar um índiceTo disable an index

  1. No Pesquisador de Objetos, clique no sinal de adição ao lado do banco de dados que contém a tabela na qual você deseja desabilitar um índice.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to disable an index.

  2. Clique no sinal de adição para expandir a pasta Tabelas .Click the plus sign to expand the Tables folder.

  3. Clique no sinal de adição ao lado da tabela na qual você deseja desabilitar um índice.Click the plus sign to expand the table on which you want to disable an index.

  4. Clique no sinal de adição para expandir a pasta Índices .Click the plus sign to expand the Indexes folder.

  5. Clique com o botão direito do mouse no índice a ser desabilitado e selecione Desabilitar.Right-click the index you want to disable and select Disable.

  6. Na caixa de diálogo Desabilitar Índices , verifique se o índice correto está na grade Índices a serem desabilitados e clique em OK.In the Disable Indexes dialog box, verify that the correct index is in the Indexes to disable grid and click OK.

Para desabilitar todos os índices de uma tabelaTo disable all indexes on a table

  1. No Pesquisador de Objetos, clique no sinal de adição para expandir o banco de dados que contém a tabela na qual você deseja desabilitar os índices.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to disable the indexes.

  2. Clique no sinal de adição para expandir a pasta Tabelas .Click the plus sign to expand the Tables folder.

  3. Clique no sinal de adição para expandir a tabela na qual você deseja desabilitar os índices.Click the plus sign to expand the table on which you want to disable the indexes.

  4. Clique com o botão direito do mouse na pasta Índices e selecione Desabilitar Todos.Right-click the Indexes folder and select Disable All.

  5. Na caixa de diálogo Desabilitar Índices , verifique se os índices corretos estão na grade Índices a serem desabilitados e clique em OK.In the Disable Indexes dialog box, verify that the correct indexes are in the Indexes to disable grid and click OK. Para remover um índice da grade Índices a serem desabilitados , selecione o índice e pressione a tecla Delete.To remove an index from the Indexes to disable grid, select the index and then press the Delete key.

As informações a seguir estão disponíveis na caixa de diálogo Desabilitar Índices :The following information is available in the Disable Indexes dialog box:

Nome do ÍndiceIndex Name
Exibe o nome do índice.Displays the name of the index. Durante a execução, esta coluna exibe também um ícone que representa o status.During execution, this column also displays an icon representing the status.

Nome da tabelaTable Name
Exibe o nome da tabela ou exibição na qual o índice foi criado.Displays the name of the table or view that the index was created on.

Tipo de ÍndiceIndex Type
Exibe o tipo do índice: Clusterizado, Não clusterizado, Espacial ou XML.Displays the type of the index: Clustered, Nonclustered, Spatial, or XML.

StatusStatus
Exibe o status atual da operação de desabilitação.Displays the status of the disable operation. Os possíveis valores após a execução são:Possible values after execution are:

  • Em brancoBlank

    Antes de execução o Status fica em branco.Prior to execution Status is blank.

  • Em andamentoIn progress

    A desabilitação dos índices foi iniciada mas não está concluída.Disabling of the indexes has been started but is not complete.

  • SuccessSuccess

    A operação de desabilitação foi concluída com êxito.The disable operation completed successfully.

  • ErroError

    Foi encontrado um erro durante a operação de desabilitação do índice e a operação e a operação não foi concluída com êxito.An error was encountered during the index disable operation, and the operation did not complete successfully.

  • Stopped (parado)Stopped

    A desabilitação do índice não foi concluída com êxito porque o usuário interrompeu a operação.The disable of the index was not completed successfully because the user stopped the operation.

MensagemMessage
Fornece o texto de mensagens de erro durante a operação de desabilitação.Provides the text of error messages during the disable operation. Durante a execução, os erros aparecem como hiperlinks.During execution, errors appear as hyperlinks. O texto dos hiperlinks descreve o corpo do erro.The text of the hyperlinks describes the body of the error. A coluna Mensagem raramente é grande o suficiente para acomodar o texto de mensagem completo.The Message column is rarely wide enough to read the full message text. Há dois modos para obter o texto completo:There are two ways to get the full text:

  • Mova o ponteiro de mouse sobre a célula de mensagem para exibir uma dica de ferramenta com o texto do erro.Move the mouse pointer over the message cell to display a ToolTip with the error text.

  • Clique no hiperlink para exibir uma caixa de diálogo que exibe o erro completo.Click the hyperlink to display a dialog box displaying the full error.

Usando o Transact-SQLUsing Transact-SQL

Para desabilitar um índiceTo disable an index

  1. No Pesquisador de Objetos, conecte-se a uma instância do Mecanismo de Banco de DadosDatabase Engine.In Object Explorer, connect to an instance of Mecanismo de Banco de DadosDatabase Engine.

  2. Na barra Padrão, clique em Nova Consulta.On the Standard bar, click New Query.

  3. Copie e cole o exemplo a seguir na janela de consulta e clique em Executar.Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;  
    GO  
    -- disables the IX_Employee_OrganizationLevel_OrganizationNode index  
    -- on the HumanResources.Employee table  
    ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
    DISABLE;  
    

Para desabilitar todos os índices de uma tabelaTo disable all indexes on a table

  1. No Pesquisador de Objetos, conecte-se a uma instância do Mecanismo de Banco de DadosDatabase Engine.In Object Explorer, connect to an instance of Mecanismo de Banco de DadosDatabase Engine.

  2. Na barra Padrão, clique em Nova Consulta.On the Standard bar, click New Query.

  3. Copie e cole o exemplo a seguir na janela de consulta e clique em Executar.Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;  
    GO  
    -- Disables all indexes on the HumanResources.Employee table.  
    ALTER INDEX ALL ON HumanResources.Employee  
    DISABLE;  
    

Para obter mais informações, consulte ALTER INDEX (Transact-SQL).For more information, see ALTER INDEX (Transact-SQL).