Löschen von Indizes
Wenn ein Index nicht mehr benötigt wird, können Sie ihn aus einer Datenbank entfernen und auf diese Weise den Speicherplatz freigeben, der zurzeit noch von dem Index verwendet wird. Beliebige Objekte in der Datenbank können diesen freigegebenen Speicherplatz anschließend verwenden. Löschen und Entfernen eines Indexes sind Synonyme.
Sie können keinen Index löschen, der von einer PRIMARY KEY- oder UNIQUE-Einschränkung verwendet wird, ohne die Einschränkung zu löschen. Wenn Sie den Index ändern, um z. B. den vom Index verwendeten Füllfaktorwert zu bearbeiten, können Sie einen Index, der von einer PRIMARY KEY- oder UNIQUE-Einschränkung verwendet wird, im Wesentlichen löschen und dann neu erstellen, ohne die Einschränkung löschen und neu erstellen zu müssen. Weitere Informationen zum Neuerstellen des Indexes finden Sie unter Neuorganisieren und Neuerstellen von Indizes.
Das Neuerstellen eines Indexes (statt ihn zu löschen und dann neu zu erstellen) eignet sich auch zum Neuerstellen eines gruppierten Indexes. Dies liegt daran, dass der Vorgang der Neuerstellung des Indexes die Anforderung zum Sortieren der Daten nach den Indexspalten überflüssig machen kann, wenn die Daten bereits in sortierter Reihenfolge vorliegen.
Indizes, die für dauerhafte oder temporäre Sichten oder Tabellen erstellt wurden, werden automatisch gelöscht, wenn die Sicht oder Tabelle gelöscht wird.
Hinweis |
---|
Sie können einen Index löschen, wenn Sie die ALTER-Berechtigungen für die Tabelle besitzen. |
Gruppierte Indizes
Wenn ein gruppierter Index gelöscht wird, werden die Datenzeilen, die auf der Blattebene des gruppierten Indexes gespeichert waren, in einer ungeordneten Tabelle (Heap) gespeichert. Das Löschen eines gruppierten Indexes kann zeitaufwändig sein, weil nicht nur der gruppierte Index gelöscht werden muss, sondern auch alle nicht gruppierten Indizes für die Tabelle neu erstellt werden müssen, um die Schlüssel des gruppierten Indexes durch Zeilenzeiger auf den Heap zu ersetzen. Beim Löschen aller Indizes für eine Tabelle sollten Sie zunächst die nicht gruppierten Indizes und zuletzt den gruppierten Index löschen. Auf diese Weise müssen keine Indizes neu erstellt werden. Weitere Informationen zur Beziehung zwischen gruppierten und nicht gruppierten Indizes finden Sie unter Strukturen nicht gruppierter Indizes.
Temporärer Speicherplatz ist erforderlich, um einen gruppierten Index während eines Onlinelöschvorgangs zu löschen. Gleiches gilt, wenn die MOVE TO-Klausel angegeben wird. Weitere Informationen finden Sie unter Speicherplatzanforderungen für Index-DDL-Vorgänge.
Wenn der gruppierte Index einer indizierten Sicht gelöscht wird, werden alle nicht gruppierten Indizes und automatisch erstellten Statistiken für die gleiche Sicht automatisch gelöscht. Manuell erstellte Statistiken werden nicht gelöscht.
Verwenden der MOVE TO-Klausel
Sie können den gruppierten Index löschen und die sich ergebende ungeordnete Tabelle (Heap) in einer einzigen Transaktion durch Angeben der MOVE TO-Option in eine andere Dateigruppe oder ein anderes Partitionsschema verschieben. Die MOVE TO-Option weist die folgenden Einschränkungen auf:
Sie ist für indizierte Sichten oder nicht gruppierte Indizes unzulässig.
Das angegebene Partitionsschema oder die Dateigruppe muss bereits vorhanden sein.
Wenn MOVE TO nicht angegeben wird, wird die sich ergebende Tabelle im gleichen Partitionsschema oder in der Dateigruppe gespeichert, das bzw. die für den gruppierten Index definiert wurde.
Löschen gruppierter Indizes online
Sie können die ONLINE-Option angeben, wenn Sie einen gruppierten Index löschen. Wenn diese Option auf ON festgelegt wird, werden Abfragen und Änderungen der zugrunde liegenden Daten sowie zugehöriger nicht gruppierter Indizes von der DROP INDEX-Transaktion nicht blockiert. Weitere Informationen finden Sie unter Ausführen von Onlineindexvorgängen.
Die ONLINE-Option weist die folgenden Einschränkungen auf, wenn ON festgelegt wurde:
Es kann nur jeweils ein Index gleichzeitig gelöscht werden.
Die Option ist für deaktivierte gruppierte Indizes unzulässig.
Sie ist für einen gruppierten Index für eine Sicht oder nicht gruppierte Indizes für Tabellen oder Sichten unzulässig.
Ein gruppierter Index, der text-, ntext-, image-, varchar(max)-, nvarchar(max)-, varbinary(max)- oder xml-Spalten in den Datenzeilen der Blattebene enthält, kann nicht online gelöscht werden.
Festlegen der MAXDOP-Indexoption
Sie können die Konfigurationsoption max degree of parallelism von sp_configure für den Indexlöschvorgang außer Kraft setzen, indem Sie die MAXDOP-Indexoption angeben. Weitere Informationen finden Sie unter Konfigurieren von Parallelindexvorgänge.
Volltextindizes
Ein Index, der als Volltextschlüssel der Tabelle angegeben ist, kann nicht gelöscht werden. Zeigen Sie die Indexeigenschaften an, um zu ermitteln, ob der Index ein Volltextschlüssel ist. Weitere Informationen finden Sie unter INDEXPROPERTY (Transact-SQL).
So löschen Sie einen Index
Vorgehensweise: Löschen eines Index (SQL Server Management Studio)
Beispiele
A. Löschen eines Indexes
Das folgende Beispiel löscht den Index IX_ProductVendor_VendorID in der ProductVendor-Tabelle.
USE AdventureWorks;
GO
DROP INDEX IX_ProductVendor_VendorID
ON Purchasing.ProductVendor;
GO
B. Löschen eines gruppierten Indexes im ONLINE-Modus
Das folgende Beispiel löscht einen gruppierten Index, wobei die ONLINE-Option auf ON festgelegt wurde. Die sich ergebende ungeordnete Tabelle (Heap) wird in der gleichen Dateigruppe gespeichert, in der auch der Index gespeichert war.
USE AdventureWorks;
GO
DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate
ON Production.BillOfMaterials WITH (ONLINE = ON, MAXDOP = 2);
GO