Deaktivieren von Indizes und EinschränkungenDisable Indexes and Constraints

GILT FÜR: jaSQL ServerjaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

In diesem Thema wird beschrieben, wie ein Index oder Einschränkungen in SQL Server 2017SQL Server 2017 mit SQL Server Management StudioSQL Server Management Studio oder Transact-SQLTransact-SQLdeaktiviert werden.This topic describes how to disable an index or constraints in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. 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.Disabling an index prevents user access to the index, and for clustered indexes to the underlying table data. Die Indexdefinition verbleibt jedoch in den Metadaten, und bei nicht gruppierten Indizes werden die Indexstatistiken beibehalten.The index definition remains in metadata, and index statistics are kept on nonclustered indexes. Beim Deaktivieren eines nicht gruppierten oder gruppierten Indexes in einer Sicht werden die Indexdaten physisch gelöscht.Disabling a nonclustered or clustered index on a view physically deletes the index data. Das Deaktivieren eines gruppierten Indexes für eine Tabelle verhindert lediglich das Zugreifen auf die Daten; diese verbleiben in der Tabelle, sind jedoch erst für DML-Vorgänge (Datenbearbeitungssprache) verfügbar, wenn der Index gelöscht oder neu erstellt wurde.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.

In diesem ThemaIn This Topic

VorbereitungenBefore You Begin

EinschränkungenLimitations and Restrictions

  • Der Index wird nicht beibehalten, während er deaktiviert ist.The index is not maintained while it is disabled.

  • Der deaktivierte Index wird beim Erstellen von Abfrageausführungsplänen nicht vom Abfrageoptimierer berücksichtigt.The query optimizer does not consider the disabled index when creating query execution plans. Des weiteren erzeugen Abfragen einen Fehler, die über einen Tabellenhinweis auf den deaktivierten Index verweisen.Also, queries that reference the disabled index with a table hint fail.

  • Sie können keinen Index mit dem gleichen Namen erstellen, den ein vorhandener deaktivierter Index aufweist.You cannot create an index that uses the same name as an existing disabled index.

  • Ein deaktivierter Index kann nicht gelöscht werden.A disabled index can be dropped.

  • Beim Deaktivieren eines eindeutigen Indexes werden die PRIMARY KEY- oder UNIQUE-Einschränkung sowie alle FOREIGN KEY-Einschränkungen, die aus anderen Tabellen auf die indizierten Spalten verweisen, ebenfalls deaktiviert.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. Beim Deaktivieren eines gruppierten Indexes werden alle eingehenden und ausgehenden FOREIGN KEY-Einschränkungen der zugrunde liegenden Tabelle ebenfalls deaktiviert.When disabling a clustered index, all incoming and outgoing FOREIGN KEY constraints on the underlying table are also disabled. Die Namen der Einschränkungen werden in einer Warnmeldung aufgeführt, wenn der Index deaktiviert wird.The constraint names are listed in a warning message when the index is disabled. Nach dem Neuerstellen des Indexes müssen alle Einschränkungen mithilfe der ALTER TABLE CHECK CONSTRAINT-Anweisung manuell aktiviert werden.After rebuilding the index, all constraints must be manually enabled by using the ALTER TABLE CHECK CONSTRAINT statement.

  • Nicht gruppierte Indizes werden mit dem Deaktivieren des gruppierten Indexes, dem sie zugeordnet sind, automatisch deaktiviert.Nonclustered indexes are automatically disabled when the associated clustered index is disabled. Sie können nicht mehr aktiviert werden, bis der gruppierte Index der Tabelle oder Sicht aktiviert bzw. der gruppierte Index der Tabelle gelöscht wird.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. Nicht gruppierte Indizes müssen explizit aktiviert werden, es sei denn, der gruppierte Index wurde mithilfe der ALTER INDEX ALL REBUILD-Anweisung aktiviert.Nonclustered indexes must be explicitly enabled, unless the clustered index was enabled by using the ALTER INDEX ALL REBUILD statement.

  • Die ALTER INDEX ALL REBUILD-Anweisung erstellt alle deaktivierten Indizes der Tabelle neu und aktiviert sie, mit Ausnahme von deaktivierten Indizes für Sichten.The ALTER INDEX ALL REBUILD statement rebuilds and enables all disabled indexes on the table, except for disabled indexes on views. Indizes für Sichten müssen durch eine separate ALTER INDEX ALL REBUILD-Anweisung aktiviert werden.Indexes on views must be enabled in a separate ALTER INDEX ALL REBUILD statement.

  • Beim Deaktivieren eines gruppierten Indexes auf einer Tabelle werden auch alle gruppierten und nicht gruppierten Indizes in Sichten deaktiviert, die auf diese Tabelle verweisen.Disabling a clustered index on a table also disables all clustered and nonclustered indexes on views that reference that table. Diese Indizes müssen genau wie die Indizes der Tabelle, auf die sie verweisen, neu erstellt werden.These indexes must be rebuilt just as those on the referenced table.

  • Auf die Datenzeilen des deaktivierten gruppierten Indexes kann nicht zugegriffen werden, mit Ausnahme von Zugriffen zum Löschen oder Neuerstellen des gruppierten Indexes.The data rows of the disabled clustered index cannot be accessed except to drop or rebuild the clustered index.

  • Sie können einen deaktivierten nicht gruppierten Index online neu erstellen, wenn die Tabelle über einen gruppierten Index verfügt, der nicht deaktiviert ist.You can rebuild a disabled nonclustered index online when the table does not have a disabled clustered index. Sie müssen jedoch einen deaktivierten gruppierten Index immer offline neu erstellen, wenn Sie die ALTER INDEX REBUILD- oder CREATE INDEX WITH DROP_EXISTING-Anweisung verwenden.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. Weitere Informationen zu Onlineindexvorgängen finden Sie unter Ausführen von Onlineindexvorgängen.For more information about online index operations, see Perform Index Operations Online.

  • Die CREATE STATISTICS-Anweisung kann nicht für eine Tabelle mit einem deaktivierten gruppierten Index ausgeführt werden.The CREATE STATISTICS statement cannot be successfully executed on a table that has a disabled clustered index.

  • Die AUTO_CREATE_STATISTICS-Datenbankoption erstellt neue Statistiken für eine Spalte, wenn der Index deaktiviert ist und folgende Bedingungen zutreffen: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 ist auf ON festgelegt.AUTO_CREATE_STATISTICS is set to ON

    • Es sind keine Statistiken für die Spalte vorhanden.There are no existing statistics for the column.

    • Statistiken sind während der Abfrageoptimierung erforderlich.Statistics are required during query optimization.

  • Ist ein gruppierter Index deaktiviert, kann DBCC CHECKDB keine Informationen über die zugrunde liegende Tabelle zurückgeben. Stattdessen meldet die Anweisung, dass der gruppierte Index deaktiviert ist.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 kann nicht zur Defragmentierung eines deaktivierten Indexes verwendet werden. Die Anweisung schlägt mit einer Fehlermeldung fehl.DBCC INDEXDEFRAG cannot be used to defragment a disabled index; the statement fails with an error message. Zum Neuerstellen eines deaktivierten Indexes können Sie DBCC DBREINDEX verwenden.You can use DBCC DBREINDEX to rebuild a disabled index.

  • Durch Erstellen eines neuen gruppierten Indexes werden zuvor deaktivierte nicht gruppierte Indizes aktiviert.Creating a new clustered index enables previously disabled nonclustered indexes. Weitere Informationen finden Sie unter Enable Indexes and Constraints.For more information, see Enable Indexes and Constraints.

SicherheitSecurity

BerechtigungenPermissions

Zum Ausführen von ALTER INDEX benötigen Sie mindestens die ALTER-Berechtigung auf der Tabelle bzw. Sicht.To execute ALTER INDEX, at a minimum, ALTER permission on the table or view is required.

Verwenden von SQL Server Management StudioUsing SQL Server Management Studio

So deaktivieren Sie einen IndexTo disable an index

  1. Klicken Sie in Objekt-Explorer auf das Pluszeichen, um die Datenbank zu erweitern, die die Tabelle enthält, in der Sie einen Index deaktivieren möchten.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to disable an index.

  2. Klicken Sie auf das Pluszeichen, um den Ordner Tabellen zu erweitern.Click the plus sign to expand the Tables folder.

  3. Klicken Sie auf das Pluszeichen, um die Tabelle zu erweitern, in der Sie einen Index deaktivieren möchten.Click the plus sign to expand the table on which you want to disable an index.

  4. Klicken Sie auf das Pluszeichen, um den Ordner Indizes zu erweitern.Click the plus sign to expand the Indexes folder.

  5. Klicken Sie mit der rechten Maustaste auf den Index, den Sie deaktivieren möchten, und wählen Sie Deaktivierenaus.Right-click the index you want to disable and select Disable.

  6. Überprüfen Sie im Dialogfeld Index deaktivieren , dass der richtige Index im Raster Zu deaktivierende Indizes ausgewählt ist, und klicken sie auf OK.In the Disable Indexes dialog box, verify that the correct index is in the Indexes to disable grid and click OK.

So deaktivieren Sie alle Indizes in einer TabelleTo disable all indexes on a table

  1. Klicken Sie in Objekt-Explorer auf das Pluszeichen, um die Datenbank zu erweitern, die die Tabelle enthält, in der Sie die Indizes deaktivieren möchten.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to disable the indexes.

  2. Klicken Sie auf das Pluszeichen, um den Ordner Tabellen zu erweitern.Click the plus sign to expand the Tables folder.

  3. Klicken Sie auf das Pluszeichen, um die Tabelle zu erweitern, in der Sie die Indizes deaktivieren möchten.Click the plus sign to expand the table on which you want to disable the indexes.

  4. Klicken Sie mit der rechten Maustaste auf den Ordner Indizes , und wählen Sie Alle deaktivierenaus.Right-click the Indexes folder and select Disable All.

  5. Überprüfen Sie im Dialogfeld Indizes deaktivieren , dass die richtigen Indizes im Raster Zu deaktivierende Indizes ausgewählt sind, und klicken sie auf OK.In the Disable Indexes dialog box, verify that the correct indexes are in the Indexes to disable grid and click OK. Um einen Index aus dem Raster Zu deaktivierende Indizes zu entfernen, wählen Sie den Index aus, und drücken Sie die ENTF-Taste.To remove an index from the Indexes to disable grid, select the index and then press the Delete key.

Die folgenden Informationen sind im Dialogfeld Index deaktivieren verfügbar:The following information is available in the Disable Indexes dialog box:

IndexnameIndex Name
Zeigt den Namen des Indexes an.Displays the name of the index. Während der Ausführung wird in dieser Spalte auch ein Symbol angezeigt, das den Status wiedergibt.During execution, this column also displays an icon representing the status.

TabellennameTable Name
Zeigt den Namen der Tabelle oder Sicht an, für die der Index erstellt wurde.Displays the name of the table or view that the index was created on.

IndextypIndex Type
Zeigt den Typ des Indexes an: Gruppiert, Nicht gruppiert, Räumlich oder XML.Displays the type of the index: Clustered, Nonclustered, Spatial, or XML.

StatusStatus
Zeigt den Status des Deaktivierungsvorgangs an.Displays the status of the disable operation. Mögliche Werte nach der Ausführung:Possible values after execution are:

  • LeerBlank

    Vor der Ausführung ist Status leer.Prior to execution Status is blank.

  • Vorgang wird ausgeführtIn progress

    Die Deaktivierung der Indizes wurde gestartet, ist aber noch nicht abgeschlossen.Disabling of the indexes has been started but is not complete.

  • SuccessSuccess

    Der Deaktivierungsvorgang ist erfolgreich abgeschlossen.The disable operation completed successfully.

  • FehlerError

    Während des Indexdeaktivierungsvorgangs ist ein Fehler aufgetreten, und der Vorgang wurde nicht erfolgreich abgeschlossen.An error was encountered during the index disable operation, and the operation did not complete successfully.

  • BeendetStopped

    Die Deaktivierung des Indexes wurde nicht erfolgreich abgeschlossen, weil der Benutzer den Vorgang gestoppt hat.The disable of the index was not completed successfully because the user stopped the operation.

MessageBoxMessage
Stellt den Text der Fehlermeldungen während des Deaktivierungsvorgangs bereit.Provides the text of error messages during the disable operation. Während der Ausführung werden die Fehler als Links angezeigt.During execution, errors appear as hyperlinks. Der Text der Links beschreibt den Hauptteil des Fehlers.The text of the hyperlinks describes the body of the error. Die Spalte Meldung ist meist nicht breit genug, um den vollständigen Meldungstext lesen zu können.The Message column is rarely wide enough to read the full message text. Der vollständige Text kann auf zwei Arten abgerufen werden:There are two ways to get the full text:

  • Bewegen Sie den Mauszeiger über die Meldungszelle, um eine QuickInfo mit dem Fehlertext anzuzeigen.Move the mouse pointer over the message cell to display a ToolTip with the error text.

  • Klicken Sie auf den Link, um ein Dialogfeld mit dem vollständigen Fehler anzuzeigen.Click the hyperlink to display a dialog box displaying the full error.

Verwenden von Transact-SQLUsing Transact-SQL

So deaktivieren Sie einen IndexTo disable an index

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Datenbank-EngineDatabase Engine-Instanz her.In Object Explorer, connect to an instance of Datenbank-EngineDatabase Engine.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.On the Standard bar, click New Query.

  3. Kopieren Sie das folgende Beispiel, fügen Sie es in das Abfragefenster ein, und klicken Sie auf Ausführen.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;  
    

So deaktivieren Sie alle Indizes in einer TabelleTo disable all indexes on a table

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Datenbank-EngineDatabase Engine-Instanz her.In Object Explorer, connect to an instance of Datenbank-EngineDatabase Engine.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.On the Standard bar, click New Query.

  3. Kopieren Sie das folgende Beispiel, fügen Sie es in das Abfragefenster ein, und klicken Sie auf Ausführen.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;  
    

Weitere Informationen finden Sie unter ALTER INDEX (Transact-SQL).For more information, see ALTER INDEX (Transact-SQL).