Deaktivieren von Indizes

Wenn Indizes deaktiviert werden, können Benutzer nicht mehr darauf zugreifen, und bei gruppierten Indizes können sie auch nicht mehr auf die dem Index zugrunde liegenden Tabellendaten zugreifen. Die Indexdefinition verbleibt jedoch in den Metadaten, und bei nicht gruppierten Indizes werden die Indexstatistiken beibehalten. Das Deaktivieren von gruppierten und nicht gruppierten Indizes für einer Sicht löscht die physischen Indexdaten. Das Deaktivieren eines gruppierten Indexes für eine Tabelle verhindert lediglich das Zugreifen auf die Daten; diese verbleiben in der Tabelle, sind jedoch nicht für DML-Vorgänge verfügbar, bis der Index gelöscht oder neu erstellt wird. Verwenden Sie zum Neuerstellen und Aktivieren eines deaktivierten Indexes die ALTER INDEX REBUILD-Anweisung oder die CREATE INDEX WITH DROP_EXISTING-Anweisung.

In den folgenden Fällen kommt es möglicherweise zur Deaktivierung eines oder mehrerer Indizes:

  • SQL Server Database Engine (Datenbankmodul) deaktiviert Indizes während eines Upgrades von SQL Server automatisch.

  • Sie deaktivieren Indizes mithilfe von ALTER INDEX manuell.

Deaktivieren eines Indexes durch einen SQL Server-Updatevorgang

Während eines Updates zur Installation einer neuen Version oder eines Service Packs für SQL Server identifiziert Database Engine (Datenbankmodul) Indizes automatisch und deaktiviert sie einschließlich Indizes in Sichten, wenn die Indizes oder Sichtdefinitionen Folgendes enthalten:

  • Einen Ausdruck, für den Database Engine (Datenbankmodul) die Indexdatenintegrität nicht mehr sicherstellen kann.

    Nehmen Sie beispielsweise an, ein Index verwendet eine Systemfunktion, die im Update so verändert wurde, dass sie nun ein anderes Ergebnis zurückgibt. Database Engine (Datenbankmodul) deaktiviert den Index während des Updates, da er möglicherweise Daten enthält, die nach Abschließen des Updates nicht mehr gültig sind.

  • Eine Sortierung, die als Teil des Updates so verändert wurde, dass der Index nun nicht mehr richtig sortiert ist.

Wenn ein Index während des Updateprozesses deaktiviert wird, zeigt eine Warnmeldung den Namen des Indexes sowie die Namen eventuell vorhandener Einschränkungen an, damit Sie diese nach dem Abschließen des Updates neu erstellen können. Beim Neuerstellen des Indexes und Aktivieren eventuell vorhandener Einschränkungen werden die während des Updates ungültig gewordenen Daten korrigiert.

Eine CHECK-Einschränkung kann deaktiviert werden, wenn die Definition einen Ausdruck enthält, für den Database Engine (Datenbankmodul) die Datenintegrität nicht mehr sicherstellen kann. Verwenden Sie zum Aktivieren der Einschränkung die ALTER TABLE CHECK-Anweisung.

Verwenden von ALTER INDEX zum Deaktivieren eines Indexes

Mithilfe der ALTER INDEX DISABLE-Anweisung können Sie einen Index jederzeit manuell deaktivieren.

HinweisHinweis

Befindet sich eine Tabelle in einer Transaktionsreplikationsveröffentlichung, können die Indizes, die mit Primärschlüsselspalten verknüpft sind, nicht deaktiviert werden, weil diese Indizes von der Replikation benötigt werden. Wenn Sie einen Index deaktivieren möchten, müssen Sie zuerst die Tabelle aus der Veröffentlichung löschen. Weitere Informationen finden Sie unter Veröffentlichen von Daten und Datenbankobjekten.

Möglicherweise müssen Sie einen Index deaktivieren, um folgende Aufgaben auszuführen:

  • Korrigieren eines Datenträger-E/A-Fehlers (Fehlernummern 823 oder 824) auf einer Indexseite und anschließendes Neuerstellen des Indexes.

  • Temporäres Entfernen des Indexes zu Problembehandlungszwecken.

  • Neuerstellen nicht gruppierter Indizes.

    Wenn ein nicht gruppierter Index nicht deaktiviert wird, erfordert der Neuerstellungsvorgang ausreichenden temporären Speicherplatz zum Speichern des alten und des neuen Indexes. Wenn ein nicht gruppierter Index jedoch in separaten Transaktionen deaktiviert und neu erstellt wird, kann der durch das Deaktivieren des Indexes freigegebene Speicherplatz bei der anschließenden Neuerstellung oder einen beliebigen anderen Vorgang erneut verwendet werden. Mit Ausnahme des temporären Speicherplatzes für die Sortierung (normalerweise 20 Prozent der Indexgröße) ist kein zusätzlicher Speicherplatz erforderlich.

    Wenn der verfügbare Speicherplatz begrenzt ist, kann es hilfreich sein, den nicht gruppierten Index vor dem Neuerstellen zu deaktivieren. Nehmen Sie z. B. an, Sie verfügen über eine gespeicherte Prozedur, die alle nicht gruppierten Indizes in einer oder mehreren Tabellen neu erstellt. Wenn Sie diese Indizes zuerst in einer von der Neuerstellung getrennten Transaktion deaktivieren, können Sie den zum Neuerstellen der Indizes erforderlichen Speicherplatz erheblich reduzieren.

So deaktivieren Sie einen Index

ALTER INDEX (Transact-SQL)

Vorgehensweise: Neuerstellen eines Indexes (SQL Server Management Studio)