Disabilitazione di indici

La disattivazione di un indice impedisce all'utente di accedere all'indice e, per gli indici cluster, ai dati della tabella sottostante. La definizione dell'indice viene mantenuta e le statistiche relative all'indice vengono preservate negli indici non cluster. La disattivazione di un indice cluster o non cluster in una vista comporta l'eliminazione fisica dei dati dell'indice. La disattivazione di un indice cluster in una tabella impedisce l'accesso ai dati. I dati vengono comunque mantenuti nella tabella, ma non sono disponibili per operazioni DML fino a quando l'indice non viene eliminato o ricostruito. Per ricostruire e abilitare un indice disattivato, utilizzare l'istruzione ALTER INDEX REBUILD o CREATE INDEX WITH DROP_EXISTING.

È possibile che uno o più indici siano disattivati nelle circostanze seguenti:

  • In Motore di database di SQL Server l'indice viene automaticamente disattivato durante un aggiornamento di SQL Server.

  • Per disattivare manualmente l'indice, utilizzare l'istruzione ALTER INDEX.

Disattivazione di un indice provocata dall'aggiornamento di SQL Server

Durante l'aggiornamento a un nuovo service pack o a una nuova versione di SQL Server, tramite Motore di database un indice, inclusi gli indici nelle viste, viene automaticamente identificato e disattivato quando la definizione dell'indice o della vista contiene uno degli elementi seguenti:

  • Un'espressione per cui l'integrità dei dati dell'indice non può essere più garantita da Motore di database.

    Si supponga, ad esempio, un indice che utilizza una funzione di sistema e che questa funzione sia stata modificata nell'aggiornamento in modo tale da restituire un risultato diverso. Tramite Motore di database l'indice verrà disattivato durante l'aggiornamento, in quanto potrebbe contenere dati non più validi al termine dell'aggiornamento.

  • Regole di confronto che sono state modificate come parte dell'aggiornamento in modo tale che l'indice non è più ordinato correttamente.

Quando un indice viene disattivato durante il processo di aggiornamento, in un messaggio di avviso viene visualizzato il nome dell'indice ed eventuali nomi di vincoli associati, in modo da consentirne la ricostruzione al termine dell'aggiornamento. La ricostruzione dell'indice e l'abilitazione di tutti i vincoli consentirà di correggere i dati resi non validi durante l'aggiornamento.

Un vincolo CHECK potrebbe essere disattivato se la definizione contiene un'espressione per cui non può più essere garantita l'integrità dei dati tramite Motore di database. Per abilitare il vincolo, utilizzare l'istruzione ALTER TABLE CHECK.

Utilizzo di ALTER INDEX per disattivare un indice

È possibile disattivare manualmente un indice in qualsiasi momento utilizzando l'istruzione ALTER INDEX DISABLE.

Nota

Se una tabella è inclusa in una pubblicazione per la replica transazionale, non è possibile disattivare alcun indice associato alle colonne chiave primaria. Tali indici sono necessari per la replica. Per disattivare un indice, è innanzitutto necessario eliminare la tabella dalla pubblicazione. Per ulteriori informazioni, vedere Pubblicazione di dati e oggetti di database.

La disattivazione di un indice potrebbe essere necessaria per eseguire le operazioni seguenti:

  • Correzione di un errore di I/O su disco (errore 823 o 824) in una pagina di indice e ricostruzione successiva dell'indice.

  • Rimozione temporanea dell'indice ai fini della risoluzione dei problemi.

  • Ricostruzione di indici non cluster.

    Quando un indice non cluster non è disattivato, l'operazione di ricostruzione richiede spazio su disco temporaneo sufficiente per archiviare l'indice precedente e quello nuovo. Disattivando e ricostruendo un indice non cluster in transazioni distinte, tuttavia, lo spazio su disco reso disponibile disattivando l'indice può essere riutilizzato per la ricostruzione successiva o per qualsiasi altra operazione. Non è necessario ulteriore spazio ad eccezione dello spazio su disco temporaneo per l'ordinamento, che corrisponde in genere al 20% della dimensione dell'indice.

    Se lo spazio su disco è limitato, potrebbe essere utile disattivare l'indice non cluster prima della relativa ricostruzione. Si supponga, ad esempio, di disporre di una stored procedure che ricostruisce tutti gli indici non cluster in una o più tabelle. Disattivando tali indici in una transazione distinta dall'operazione di ricostruzione, è possibile ridurre in misura significativa la quantità di spazio su disco temporaneo necessaria per ricostruirli.

Per disattivare un indice

ALTER INDEX (Transact-SQL)

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