Eliminazione di indici

Quando un indice non è più necessario, è possibile rimuoverlo da un database e recuperare lo spazio su disco attualmente occupato. Lo spazio recuperato potrà quindi essere utilizzato da qualsiasi oggetto del database. Eliminare un indice equivale a rimuoverlo.

Non è possibile eliminare un indice utilizzato da un vincolo PRIMARY KEY o UNIQUE senza eliminare il vincolo. La modifica dell'indice, ad esempio per cambiare il valore del fattore di riempimento utilizzato dall'indice, consente di eliminare e ricreare un indice utilizzato da un vincolo PRIMARY KEY o UNIQUE senza dover eliminare e ricreare il vincolo. Per ulteriori informazioni sulla ricostruzione dell'indice, vedere Riorganizzazione e ricompilazione degli indici.

Per ricreare un indice cluster, è anche possibile ricostruirlo anziché eliminarlo e ricrearlo. Il processo di ricostruzione dell'indice consente infatti di evitare di ordinare i dati in base alle colonne di indice se i dati sono già ordinati.

Gli indici creati per le viste o le tabelle (permanenti e temporanee) vengono eliminati automaticamente in seguito all'eliminazione della vista o della tabella.

Nota

È possibile eliminare un indice se si dispone delle autorizzazioni ALTER per la tabella.

Indici cluster

Quando si elimina un indice cluster, le righe di dati archiviate al livello foglia dell'indice vengono archiviate in una tabella non ordinata (heap). L'eliminazione di un indice cluster può richiedere molto tempo perché, oltre all'eliminazione dell'indice cluster, è necessario ricostruire tutti gli indici non cluster nella tabella in modo da sostituire le chiavi di indice cluster con puntatori di riga all'heap. Se è necessario eliminare tutti gli indici di una tabella, è opportuno eliminare innanzitutto tutti gli indici non cluster e quindi l'indice cluster. In tal modo, non è necessario ricostruire alcun indice. Per ulteriori informazioni sulla relazione tra indici cluster e non cluster, vedere Strutture degli indici non cluster.

Per eliminare un indice cluster durante un'operazione di eliminazione in linea oppure quando si specifica la clausola MOVE TO, è necessario disporre di spazio temporaneo su disco. Per ulteriori informazioni, vedere Requisiti di spazio su disco per operazioni DLL sugli indici.

Quando si elimina l'indice cluster di una vista indicizzata, tutti gli indici non cluster e le statistiche create automaticamente nella stessa vista vengono eliminati automaticamente. Le statistiche create manualmente non vengono invece eliminate.

Utilizzo della clausola MOVE TO

È possibile eliminare l'indice cluster e spostare la tabella risultante non ordinata (heap) in un altro filegroup o schema di partizioni con un'unica transazione specificando l'opzione MOVE TO. L'opzione MOVE TO prevede le restrizioni seguenti:

  • Non è valida per viste indicizzate o indici non cluster.

  • Lo schema di partizioni o il filegroup specificato deve essere già esistente.

  • Se non viene specificata la clausola MOVE TO, la tabella risultante verrà inserita nello stesso schema di partizioni o filegroup definito per l'indice cluster.

Eliminazione di indici cluster in linea

Durante l'eliminazione di un indice cluster è possibile specificare l'opzione ONLINE. Quando questa opzione è impostata su ON, query e operazioni di modifica sui dati sottostanti e sugli indici noncluster associati non verranno bloccate dalla transazione DROP INDEX. Per ulteriori informazioni, vedere Esecuzione di operazioni online su indici.

Se è impostata su ON, l'opzione ONLINE presenta le restrizioni seguenti:

  • È possibile eliminare un solo indice alla volta.

  • Non è valida per indici cluster disattivati.

  • Non è valida per un indice cluster in una vista oppure per indici non cluster in tabelle o viste.

  • Non è possibile eliminare in linea un indice cluster che contiene colonne text, ntext, image, varchar(max), nvarchar(max), varbinary(max) o xml nelle righe di dati al livello foglia.

Impostazione dell'opzione di indice MAXDOP

È possibile ignorare l'opzione di configurazione max degree of parallelism di sp_configure per l'operazione di eliminazione dell'indice specificando l'opzione di indice MAXDOP. Per ulteriori informazioni, vedere Configurazione di operazioni parallele sugli indici.

Indici full-text

Non è possibile eliminare un indice specificato come chiave full-text della tabella. Visualizzare le proprietà di indice per determinare se l'indice corrisponde a una chiave full-text. Per ulteriori informazioni, vedere INDEXPROPERTY (Transact-SQL).

Per eliminare un indice

DROP INDEX (Transact-SQL)

Procedura: Eliminazione di un indice (SQL Server Management Studio)

Esempi

A. Eliminazione di un indice

Nell'esempio seguente viene eliminato l'indice IX_ProductVendor_VendorID della tabella ProductVendor.

USE AdventureWorks2008R2;
GO
DROP INDEX IX_ProductVendor_BusinessEntityID 
    ON Purchasing.ProductVendor;
GO

B. Eliminazione di un indice cluster in modalità ONLINE

Nell'esempio seguente viene eliminato un indice cluster con l'opzione ONLINE impostata su ON. La tabella risultante non ordinata (heap) viene archiviata nello stesso filegroup in cui è stato archiviato l'indice.

USE AdventureWorks2008R2;
GO
DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate 
    ON Production.BillOfMaterials WITH (ONLINE = ON, MAXDOP = 2);
GO

Vedere anche

Riferimento