Descartando índices
Quando você já não precisar de um índice, poderá removê-lo de um banco de dados e recuperar o espaço de disco que ele usa atualmente. Qualquer objeto no banco de dados pode usar esse espaço recuperado. Excluir um índice e descartar um índice são sinônimos.
Você não pode descartar um índice usado por uma restrição PRIMARY KEY ou UNIQUE, a não ser descartando a restrição. Ao modificar o índice, por exemplo para modificar o valor do fator de preenchimento usado pelo índice, você pode descartar e recriar um índice usado por uma restrição PRIMARY KEY ou UNIQUE sem ter de descartar e recriar a restrição. Para obter mais informações sobre como reconstruir o índice, consulte Reorganizando e recriando índices.
Reconstruir um índice, em vez de descartá-lo e recriá-lo, também é útil para recriar um índice clusterizado. Isso ocorre porque o processo de reconstrução do índice pode remover o requisito para classificar os dados pelas colunas de índice se os dados já estiverem em ordem classificada.
Os índices criados em quaisquer exibições ou tabelas, tanto permanentes quanto temporários, são automaticamente descartados quando a exibição ou tabela são descartadas.
Observação |
---|
Você pode descartar um índice se tiver permissões ALTER na tabela. |
Índices clusterizados
Quando um índice clusterizado é descartado, as linhas de dados que foram armazenadas no nível folha do índice clusterizado são armazenadas em uma tabela não ordenada (heap). Descartar um índice clusterizado pode ser demorado, pois, além de se descartar o índice clusterizado, todos os índices não-clusterizados da tabela devem ser reconstruídos para substituir as chaves de índices clusterizados com ponteiros de linha para o heap. Quando você descartar todos os índices de uma tabela, descarte os índices não-clusterizados primeiro e o índice clusterizado por último. Dessa maneira, nenhum índice tem de ser reconstruído. Para obter mais informações sobre a relação entre índices clusterizados e não-clusterizados, consulte Estruturas de índice não clusterizado.
É requerido espaço de disco temporário para descartar um índice clusterizado durante uma operação de descarte online, ou quando a cláusula MOVE TO é especificada. Para obter mais informações, consulte Requisitos de espaço em disco para operações de índice DDL.
Quando o índice clusterizado de uma exibição indexada é descartado, todos os índices não-clusterizado e estatísticas criadas automaticamente na mesma exibição são descartados automaticamente. As estatísticas criadas manualmente não são descartadas.
Usando a cláusula MOVE TO
Você pode descartar o índice clusterizado e mover a tabela não ordenada resultante (heap) para outro grupo de arquivos ou esquema de partição em uma única transação especificando a opção MOVE TO. A opção MOVE TO tem as seguintes restrições:
Não é válida para exibições indexadas ou índices não-clusterizados.
O esquema de partição ou grupo de arquivos especificado já deve existir.
Se MOVE TO não for especificada, a tabela resultante estará localizada no mesmo esquema de partição ou grupo de arquivos definido para o índice clusterizado.
Descartando índices clusterizados online
Você pode especificar a opção ONLINE ao descartar um índice clusterizado. Quando definida como ON, as consultas e modificações aos dados subjacentes e os índices não-clusterizados associados não são bloqueados pela transação DROP INDEX. Para obter mais informações, consulte Executando operações de índice online.
Quando definida como ON, a opção ONLINE tem as seguintes restrições:
Apenas um índice pode ser descartado por vez.
Não é válida para índices clusterizados desabilitados.
Não é válida para um índice clusterizado em uma exibição ou para índices não-clusterizados em tabelas ou exibições.
Um índice clusterizado que contém text, ntext, image, varchar(max), nvarchar(max), varbinary(max) ou colunas xml nas linhas de dados no nível folha não pode ser descartado online.
Definindo a opção de índice MAXDOP
Você pode substituir a opção de configuração max degree of parallelism de sp_configure para a operação de descarte de índice especificando a opção de índice MAXDOP. Para obter mais informações, consulte Configurando operações de índice paralelo.
Índices de texto completo
Um índice especificado como chave de texto completo para a tabela não pode ser descartado. Exiba as propriedades do índice para determinar se o índice é uma chave de texto completo. Para obter mais informações, consulte INDEXPROPERTY (Transact-SQL).
Para descartar um índice
Exemplos
A. Descartando um índice
O exemplo a seguir descarta o índice IX_ProductVendor_VendorID da tabela ProductVendor.
USE AdventureWorks2008R2;
GO
DROP INDEX IX_ProductVendor_BusinessEntityID
ON Purchasing.ProductVendor;
GO
B. Descartando um índice clusterizado no modo ONLINE
O exemplo a seguir descarta um índice clusterizado com a opção de ONLINE definida como ON. A tabela não ordenada resultante (heap) é armazenada no mesmo grupo de arquivos em que o índice foi armazenado.
USE AdventureWorks2008R2;
GO
DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate
ON Production.BillOfMaterials WITH (ONLINE = ON, MAXDOP = 2);
GO