DROP INDEX (Transact-SQL)DROP INDEX (Transact-SQL)

GILT FÜR: jaSQL Server (ab 2008) jaAzure SQL-DatenbankjaAzure SQL Data Warehouse jaParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Entfernt einen oder mehrere relationale Indizes, räumliche Indizes, gefilterte Indizes oder XML-Indizes aus der aktuellen Datenbank.Removes one or more relational, spatial, filtered, or XML indexes from the current database. Sie können einen gruppierten Index löschen und die daraus resultierende Tabelle in einer einzigen Transaktion in eine andere Dateigruppe oder in ein anderes Partitionsschema verschieben, indem Sie die Option MOVE TO angeben.You can drop a clustered index and move the resulting table to another filegroup or partition scheme in a single transaction by specifying the MOVE TO option.

Die DROP INDEX-Anweisung gilt nicht für Indizes, die durch Definieren der Einschränkung PRIMARY KEY oder UNIQUE erstellt wurden.The DROP INDEX statement does not apply to indexes created by defining PRIMARY KEY or UNIQUE constraints. Verwenden Sie ALTER TABLE mit der DROP CONSTRAINT-Klausel, wenn Sie die Einschränkung und den entsprechenden Index entfernen möchten.To remove the constraint and corresponding index, use ALTER TABLE with the DROP CONSTRAINT clause.

Wichtig

Die in <drop_backward_compatible_index> definierte Syntax wird in einer zukünftigen Version von MicrosoftMicrosoftSQL ServerSQL Server entfernt.The syntax defined in <drop_backward_compatible_index> will be removed in a future version of MicrosoftMicrosoftSQL ServerSQL Server. Vermeiden Sie die Verwendung dieser Syntax bei neuen Entwicklungen, und planen Sie die Änderung von Anwendungen, in denen diese Funktion zurzeit verwendet wird.Avoid using this syntax in new development work, and plan to modify applications that currently use the feature. Verwenden Sie stattdessen die unter <drop_relational_or_xml_index> angegebene Syntax.Use the syntax specified under <drop_relational_or_xml_index> instead. XML-Indizes können mit abwärtskompatibler Syntax nicht gelöscht werden.XML indexes cannot be dropped using backward compatible syntax.

Themenlinksymbol Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

-- Syntax for SQL Server (All options except filegroup and filestream apply to Azure SQL Database.)  
  
DROP INDEX [ IF EXISTS ]   
{ <drop_relational_or_xml_or_spatial_index> [ ,...n ]   
| <drop_backward_compatible_index> [ ,...n ]  
}  
  
<drop_relational_or_xml_or_spatial_index> ::=  
    index_name ON <object>   
    [ WITH ( <drop_clustered_index_option> [ ,...n ] ) ]  
  
<drop_backward_compatible_index> ::=  
    [ owner_name. ] table_or_view_name.index_name  
  
<object> ::=  
{ database_name.schema_name.table_or_view_name | schema_name.table_or_view_name | table_or_view_name }  
  
<drop_clustered_index_option> ::=  
{  
    MAXDOP = max_degree_of_parallelism  
  | ONLINE = { ON | OFF }  
  | MOVE TO { partition_scheme_name ( column_name )   
            | filegroup_name  
            | "default"   
            }  
  [ FILESTREAM_ON { partition_scheme_name   
            | filestream_filegroup_name   
            | "default" } ]  
}  
-- Syntax for Azure SQL Database  
  
DROP INDEX  
{ <drop_relational_or_xml_or_spatial_index> [ ,...n ]   
}  
  
<drop_relational_or_xml_or_spatial_index> ::=   
    index_name ON <object>  
  
<object> ::=   
{ database_name.schema_name.table_or_view_name | schema_name.table_or_view_name | table_or_view_name }  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
DROP INDEX index_name ON { database_name.schema_name.table_name | schema_name.table_name | table_name }  
[;]  

ArgumenteArguments

IF EXISTSIF EXISTS
Gilt für: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) bis zur aktuellen Version).Applies to: SQL ServerSQL Server ( SQL Server 2016 (13.x)SQL Server 2016 (13.x) through current version).

Löscht den Standardindex nur, wenn dieser bereits vorhanden ist.Conditionally drops the index only if it already exists.

index_nameindex_name
Der Name des zu löschenden Index.Is the name of the index to be dropped.

database_namedatabase_name
Der Name der Datenbank.Is the name of the database.

schema_nameschema_name
Der Name des Schemas, zu dem die Tabelle oder Sicht gehört.Is the name of the schema to which the table or view belongs.

table_or_view_nametable_or_view_name
Der Name der Tabelle oder Sicht, die dem Index zugeordnet ist.Is the name of the table or view associated with the index. Räumliche Indizes werden nur für Tabellen unterstützt.Spatial indexes are supported only on tables.

Verwenden Sie zum Anzeigen eines Berichts über die Indizes zu einem Objekt die sys.indexes-Katalogsicht.To display a report of the indexes on an object, use the sys.indexes catalog view.

Die Windows Azure SQL-Datenbank unterstützt das aus drei Teilen bestehende Format database_name.[schema_name].object_name, wenn database_name die aktuelle Datenbank bzw. database_name tempdb ist und object_name mit # beginnt.Windows Azure SQL Database supports the three-part name format database_name.[schema_name].object_name when the database_name is the current database or the database_name is tempdb and the object_name starts with #.

<drop_clustered_index_option><drop_clustered_index_option>
Gilt für: SQL Server 2008SQL Server 2008 bis SQL Server 2017SQL Server 2017, SQL-DatenbankSQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, SQL-DatenbankSQL Database.

Steuert die Optionen für den gruppierten Index.Controls clustered index options. Diese Optionen können nicht mit anderen Indextypen verwendet werden.These options cannot be used with other index types.

MAXDOP = max_degree_of_parallelismMAXDOP = max_degree_of_parallelism
Gilt für: SQL Server 2008SQL Server 2008 bis SQL Server 2017SQL Server 2017, SQL-DatenbankSQL Database (nur Leistungsstufen P2 und P3).Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, SQL-DatenbankSQL Database (Performance Levels P2 and P3 only).

Überschreibt die Konfigurationsoption max degree of parallelism (Max. Grad an Parallelität) für die Dauer des Indexvorgangs.Overrides the max degree of parallelism configuration option for the duration of the index operation. Weitere Informationen finden Sie unter Konfigurieren der Serverkonfigurationsoption Max. Grad an Parallelität.For more information, see Configure the max degree of parallelism Server Configuration Option. Sie können mit MAXDOP die Anzahl der Prozessoren begrenzen, die bei der Ausführung paralleler Pläne verwendet werden.Use MAXDOP to limit the number of processors used in a parallel plan execution. Maximal sind 64 Prozessoren zulässig.The maximum is 64 processors.

Wichtig

MAXDOP ist für räumliche Indizes oder XML-Indizes nicht zulässig.MAXDOP is not allowed for spatial indexes or XML indexes.

max_degree_of_parallelism kann folgende Werte haben:max_degree_of_parallelism can be:

11
Unterdrückt das Generieren paralleler Pläne.Suppresses parallel plan generation.

>1>1
Begrenzt die Höchstzahl von Prozessoren in einem parallelen Indexvorgang auf die angegebene ZahlRestricts the maximum number of processors used in a parallel index operation to the specified number.

0 (Standard)0 (default)
Verwendet abhängig von der aktuellen Systemarbeitsauslastung die tatsächliche Anzahl von Prozessoren oder weniger Prozessoren.Uses the actual number of processors or fewer based on the current system workload.

Weitere Informationen finden Sie unter Konfigurieren von Parallelindexvorgängen.For more information, see Configure Parallel Index Operations.

Hinweis

Parallele Indexvorgänge sind nicht in jeder Edition von SQL ServerSQL Server verfügbar.Parallel index operations are not available in every edition of SQL ServerSQL Server. Eine Liste der Funktionen, die von den SQL ServerSQL Server-Editionen unterstützt werden, finden Sie unter Editionen und unterstütze Funktionen für den SQL Server 2016.For a list of features that are supported by the editions of SQL ServerSQL Server, see Editions and Supported Features for SQL Server 2016.

ONLINE = ON | OFFONLINE = ON | OFF
Gilt für: SQL Server 2008SQL Server 2008 bis SQL Server 2017SQL Server 2017, Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, Azure SQL-DatenbankAzure SQL Database.

Gibt an, ob die zugrunde liegenden Tabellen und zugeordneten Indizes für Abfragen und Datenänderungen während des Indexvorgangs verfügbar sind.Specifies whether underlying tables and associated indexes are available for queries and data modification during the index operation. Der Standardwert ist OFF.The default is OFF.

ONON
Langfristigen Tabellensperren werden nicht aufrechterhalten.Long-term table locks are not held. Abfragen oder Updates der zugrunde liegenden Tabelle können fortgesetzt werden.This allows queries or updates to the underlying table to continue.

OFFOFF
Tabellensperren werden angewendet, und die Tabelle steht für die Dauer der Indexerstellungsvorgangs nicht zur Verfügung.Table locks are applied and the table is unavailable for the duration of the index operation.

Die Option ONLINE kann nur dann angegeben werden, wenn Sie gruppierte Indizes löschen.The ONLINE option can only be specified when you drop clustered indexes. Weitere Informationen finden Sie im Abschnitt mit Hinweisen.For more information, see the Remarks section.

Hinweis

Onlineindexvorgänge sind nicht in jeder Edition von SQL ServerSQL Serververfügbar.Online index operations are not available in every edition of SQL ServerSQL Server. Eine Liste der Funktionen, die von den SQL ServerSQL Server-Editionen unterstützt werden, finden Sie unter Editionen und unterstütze Funktionen für den SQL Server 2016.For a list of features that are supported by the editions of SQL ServerSQL Server, see Editions and Supported Features for SQL Server 2016.

MOVE TO { partition_scheme_name ( column_name ) | filegroup_name | " default "MOVE TO { partition_scheme_name(column_name) | filegroup_name | " default "
Gilt für: SQL Server 2008SQL Server 2008 bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017. SQL-DatenbankSQL Database unterstützt „default“ als Dateigruppenname.supports "default" as the filegroup name.

Gibt einen Speicherort an, an den die Datenzeilen verschoben werden, die sich zurzeit auf der Blattebene des gruppierten Index befinden.Specifies a location to move the data rows that currently are in the leaf level of the clustered index. Die Daten werden in einen Heap an den neuen Speicherort verschoben.The data is moved to the new location in the form of a heap. Als neuen Speicherort können Sie entweder ein Partitionsschema oder eine Dateigruppe angeben, das Partitionsschema oder die Dateigruppe muss jedoch bereits vorhanden sein.You can specify either a partition scheme or filegroup as the new location, but the partition scheme or filegroup must already exist. MOVE TO ist für indizierte Sichten oder nicht gruppierte Indizes nicht gültig.MOVE TO is not valid for indexed views or nonclustered indexes. Wird kein Partitionsschema oder keine Dateigruppe angegeben, dann befindet sich die daraus resultierende Tabelle entsprechend der Definition für den gruppierten Index im Partitionsschema oder in der Dateigruppe.If a partition scheme or filegroup is not specified, the resulting table will be located in the same partition scheme or filegroup as was defined for the clustered index.

Wird ein gruppierter Index mit MOVE TO gelöscht, werden alle nicht gruppierten Indizes für die Basistabelle neu erstellt. Sie verbleiben jedoch in ihren ursprünglichen Dateigruppen oder Partitionsschemas.If a clustered index is dropped by using MOVE TO, any nonclustered indexes on the base table are rebuilt, but they remain in their original filegroups or partition schemes. Wenn die Basistabelle in eine andere Dateigruppe oder ein anderes Partitionsschema verschoben wird, werden die nicht gruppierten Indizes nicht verschoben, um dem neuen Speicherort der Basistabelle (Heap) zu entsprechen.If the base table is moved to a different filegroup or partition scheme, the nonclustered indexes are not moved to coincide with the new location of the base table (heap). Deshalb ist es möglich, dass die nicht gruppierten Indizes nicht mehr mit dem Heap ausgerichtet sind, selbst wenn sie vorher mit dem gruppierten Index ausgerichtet wurden.Therefore, even if the nonclustered indexes were previously aligned with the clustered index, they might no longer be aligned with the heap. Weitere Informationen zu Ausrichtung von partitionierten Indizes finden Sie unter Partitionierte Tabellen und Indizes.For more information about partitioned index alignment, see Partitioned Tables and Indexes.

partition_scheme_name ( column_name )partition_scheme_name ( column_name )
Gilt für: SQL Server 2008SQL Server 2008 bis SQL Server 2017SQL Server 2017, SQL-DatenbankSQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, SQL-DatenbankSQL Database.

Gibt ein Partitionsschema als Speicherort für die resultierende Tabelle an.Specifies a partition scheme as the location for the resulting table. Das Partitionsschema muss bereits durch Ausführen von CREATE PARTITION SCHEME oder ALTER PARTITION SCHEME erstellt worden sein.The partition scheme must have already been created by executing either CREATE PARTITION SCHEME or ALTER PARTITION SCHEME. Wird kein Speicherort angegeben und ist die Tabelle partitioniert, dann wird die Tabelle in das Partitionsschema des vorhandenen gruppierten Index aufgenommen.If no location is specified and the table is partitioned, the table is included in the same partition scheme as the existing clustered index.

Für den Spaltennamen im Schema gibt es keine Beschränkung auf die Spalten in der Indexdefinition.The column name in the scheme is not restricted to the columns in the index definition. Jede beliebige Spalte in der Basistabelle kann angegeben werden.Any column in the base table can be specified.

filegroup_namefilegroup_name
Gilt für: SQL Server 2008SQL Server 2008 bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

Gibt eine Dateigruppe als Speicherort für die resultierende Tabelle an.Specifies a filegroup as the location for the resulting table. Wird kein Speicherort angegeben und ist die Tabelle nicht partitioniert, dann wird die resultierende Tabelle in die Dateigruppe aufgenommen, in der sich der gruppierte Index befindet.If no location is specified and the table is not partitioned, the resulting table is included in the same filegroup as the clustered index. Die Dateigruppe muss bereits vorhanden sein.The filegroup must already exist.

" default "" default "
Gibt den Standardspeicherort für die resultierende Tabelle an.Specifies the default location for the resulting table.

Hinweis

In diesem Zusammenhang ist DEFAULT kein Schlüsselwort.In this context, default is not a keyword. Es ist ein Bezeichner für die Standarddateigruppe und muss begrenzt werden, wie in MOVE TO " default " oder MOVE TO [ default ] .It is an identifier for the default filegroup and must be delimited, as in MOVE TO " default " or MOVE TO [ default ]. Wenn " default " angegeben ist, muss die QUOTED_IDENTIFIER-Option in der aktuellen Sitzung auf ON festgelegt sein.If " default " is specified, the QUOTED_IDENTIFIER option must be set ON for the current session. Dies ist die Standardeinstellung.This is the default setting. Weitere Informationen finden Sie unter SET QUOTED_IDENTIFIER (Transact-SQL).For more information, see SET QUOTED_IDENTIFIER (Transact-SQL).

FILESTREAM_ON { partition_scheme_name | filestream_filegroup_name | " default " }FILESTREAM_ON { partition_scheme_name | filestream_filegroup_name | " default " }
Gilt für: SQL Server 2008SQL Server 2008 bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

Gibt einen Speicherort an, an den die FILESTREAM-Tabelle verschoben wird, die sich zurzeit auf der Blattebene des gruppierten Index befindet.Specifies a location to move the FILESTREAM table that currently is in the leaf level of the clustered index. Die Daten werden in einen Heap an den neuen Speicherort verschoben.The data is moved to the new location in the form of a heap. Als neuen Speicherort können Sie entweder ein Partitionsschema oder eine Dateigruppe angeben, das Partitionsschema oder die Dateigruppe muss jedoch bereits vorhanden sein.You can specify either a partition scheme or filegroup as the new location, but the partition scheme or filegroup must already exist. FILESTREAM ON ist für indizierte Sichten oder nicht gruppierte Indizes unzulässig.FILESTREAM ON is not valid for indexed views or nonclustered indexes. Wird kein Partitionsschema angegeben, werden die Daten in demselben Partitionsschema platziert, das für den gruppierten Index definiert war.If a partition scheme is not specified, the data will be located in the same partition scheme as was defined for the clustered index.

partition_scheme_namepartition_scheme_name
Gibt ein Partitionsschema für FILESTREAM-Daten an.Specifies a partition scheme for the FILESTREAM data. Das Partitionsschema muss bereits durch Ausführen von CREATE PARTITION SCHEME oder ALTER PARTITION SCHEME erstellt worden sein.The partition scheme must have already been created by executing either CREATE PARTITION SCHEME or ALTER PARTITION SCHEME. Wird kein Speicherort angegeben und ist die Tabelle partitioniert, dann wird die Tabelle in das Partitionsschema des vorhandenen gruppierten Index aufgenommen.If no location is specified and the table is partitioned, the table is included in the same partition scheme as the existing clustered index.

Wenn Sie ein Partitionsschema für MOVE TO angeben, müssen Sie dasselbe Partitionsschema für FILESTREAM ON verwenden.If you specify a partition scheme for MOVE TO, you must use the same partition scheme for FILESTREAM ON.

filestream_filegroup_namefilestream_filegroup_name
Gibt eine FILESTREAM-Dateigruppe für FILESTREAM-Daten an.Specifies a FILESTREAM filegroup for FILESTREAM data. Wenn kein Speicherort angegeben und die Tabelle nicht partitioniert ist, werden die Daten in die FILESTREAM-Standarddateigruppe eingefügt.If no location is specified and the table is not partitioned, the data is included in the default FILESTREAM filegroup.

" default "" default "
Gibt den Standardspeicherort für FILESTREAM-Daten an.Specifies the default location for the FILESTREAM data.

Hinweis

In diesem Zusammenhang ist DEFAULT kein Schlüsselwort.In this context, default is not a keyword. Es ist ein Bezeichner für die Standarddateigruppe und muss begrenzt werden, wie in MOVE TO " default " oder MOVE TO [ default ] .It is an identifier for the default filegroup and must be delimited, as in MOVE TO " default " or MOVE TO [ default ]. Wenn "default" angegeben wird, muss die Option QUOTED_IDENTIFIER für die aktuelle Sitzung auf ON festgelegt sein.If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. Dies ist die Standardeinstellung.This is the default setting. Weitere Informationen finden Sie unter SET QUOTED_IDENTIFIER (Transact-SQL).For more information, see SET QUOTED_IDENTIFIER (Transact-SQL).

RemarksRemarks

Wenn ein nicht gruppierter Index gelöscht wird, wird die Indexdefinition aus den Metadaten entfernt, und die Indexdatenseiten (in der B-Struktur) werden aus den Datenbankdateien entfernt.When a nonclustered index is dropped, the index definition is removed from metadata and the index data pages (the B-tree) are removed from the database files. Wenn ein gruppierter Index gelöscht wird, wird die Indexdefinition aus den Metadaten entfernt und die auf der Blattebene des gruppierten Indexes gespeicherten Datenzeilen werden in der daraus resultierenden, nicht sortierten Tabelle (Heap) gespeichert.When a clustered index is dropped, the index definition is removed from metadata and the data rows that were stored in the leaf level of the clustered index are stored in the resulting unordered table, a heap. Der gesamte Speicherplatz, der vorher für den Index benötigt wurde, wird wieder freigegeben.All the space previously occupied by the index is regained. Dieser Speicherplatz kann dann für beliebige Datenbankobjekte verwendet werden.This space can then be used for any database object.

Ein Index kann nicht gelöscht werden, wenn die Dateigruppe, in der sich der Index befindet, offline oder schreibgeschützt ist.An index cannot be dropped if the filegroup in which it is located is offline or set to read-only.

Wenn der gruppierte Index einer indizierten Sicht gelöscht wird, dann werden alle nicht gruppierten Indizes und automatisch erstellten Statistiken dieser Sicht automatisch gelöscht.When the clustered index of an indexed view is dropped, all nonclustered indexes and auto-created statistics on the same view are automatically dropped. Manuell erstellte Statistiken werden nicht gelöscht.Manually created statistics are not dropped.

Die Syntax table_or_view_name . index_name wird aus Gründen der Abwärtskompatibilität beibehalten.The syntax table_or_view_name.index_name is maintained for backward compatibility. XML-Indizes oder räumliche Indizes können mit abwärtskompatibler Syntax nicht gelöscht werden.An XML index or spatial index cannot be dropped by using the backward compatible syntax.

Werden Indizes mit 128 oder mehr Blöcken gelöscht, verzögert das Datenbank-EngineDatabase Engine die Aufhebung der Seitenzuordnungen und der dazugehörigen Sperren, bis ein Commit für die Transaktion ausgeführt wurde.When indexes with 128 extents or more are dropped, the Datenbank-EngineDatabase Engine defers the actual page deallocations, and their associated locks, until after the transaction commits.

Gelegentlich werden Indizes gelöscht und neu erstellt, um den Index neu zu organisieren oder neu zu erstellen, beispielsweise um einen neuen Füllfaktorwert anzuwenden oder um Daten nach dem Massenladen neu zu organisieren.Sometimes indexes are dropped and re-created to reorganize or rebuild the index, such as to apply a new fill factor value or to reorganize data after a bulk load. Für diesen Vorgang ist die Verwendung von ALTER INDEX effizienter, insbesondere bei gruppierten Indizes.To do this, using ALTER INDEXis more efficient, especially for clustered indexes. ALTER INDEX REBUILD verwendet Optimierungen, um den Aufwand der Neuerstellung der nicht gruppierten Indizes zu vermeiden.ALTER INDEX REBUILD has optimizations to prevent the overhead of rebuilding the nonclustered indexes.

Verwenden von Optionen mit DROP INDEXUsing Options with DROP INDEX

Sie können folgende Indexoptionen festlegen, wenn Sie einen gruppierten Index löschen: MAXDOP, ONLINE und MOVE TO.You can set the following index options when you drop a clustered index: MAXDOP, ONLINE, and MOVE TO.

Verwenden Sie MOVE TO, um den gruppierten Index zu löschen und um die daraus resultierende Tabelle in einer einzigen Transaktion in eine andere Dateigruppe oder in ein anderes Partitionsschema zu verschieben.Use MOVE TO to drop the clustered index and move the resulting table to another filegroup or partition scheme in a single transaction.

Wenn Sie ONLINE = ON angeben, werden Abfragen und Änderungen der zugrunde liegenden Daten und dazugehörigen nicht gruppierten Indizes nicht von den DROP INDEX-Transaktion blockiert.When you specify ONLINE = ON, queries and modifications to the underlying data and associated nonclustered indexes are not blocked by the DROP INDEX transaction. Online kann jeweils nur ein gruppierter Index gelöscht werden.Only one clustered index can be dropped online at a time. Eine vollständige Beschreibung der Option ONLINE finden Sie unter CREATE INDEX (Transact-SQL).For a complete description of the ONLINE option, see CREATE INDEX (Transact-SQL).

Sie können einen gruppierten Index nicht online löschen, wenn der Index für eine Sicht deaktiviert ist oder in den Datenzeilen auf Blattebene die Spalten text, ntext, image, varchar(max) , nvarchar(max) , varbinary(max) oder xml enthält.You cannot drop a clustered index online if the index is disabled on a view, or contains text, ntext, image, varchar(max), nvarchar(max), varbinary(max), or xml columns in the leaf-level data rows.

Für das Verwenden der Optionen ONLINE = ON und MOVE TO wird zusätzlicher temporärer Speicherplatz benötigt.Using the ONLINE = ON and MOVE TO options requires additional temporary disk space.

Wenn ein Index gelöscht wird, wird der daraus resultierende Heap in der Katalogsicht sys.indexes mit NULL in der Spalte name angezeigt.After an index is dropped, the resulting heap appears in the sys.indexes catalog view with NULL in the name column. Zum Anzeigen des Tabellennamens verknüpfen Sie sys.indexes mit sys.tables für object_id.To view the table name, join sys.indexes with sys.tables on object_id. Unter Beispiel D finden Sie eine Beispielabfrage.For an example query, see example D.

Auf Multiprozessorcomputern, auf denen SQL Server 2005 Enterprise EditionSQL Server 2005 Enterprise Edition oder höher ausgeführt wird, kann DROP INDEX mehr Prozessoren zum Ausführen von Scan- und Sortierungsvorgängen verwenden, die dem Löschen des gruppierten Index zugeordnet sind. Dies geschieht in gleicher Weise wie für andere Abfragen.On multiprocessor computers that are running SQL Server 2005 Enterprise EditionSQL Server 2005 Enterprise Edition or later, DROP INDEX may use more processors to perform the scan and sort operations associated with dropping the clustered index, just like other queries do. Sie können die Anzahl der Prozessoren, die zur Ausführung der DROP INDEX-Anweisung verwendet werden, durch Angeben der MAXDOP-Indexoption manuell konfigurieren.You can manually configure the number of processors that are used to run the DROP INDEX statement by specifying the MAXDOP index option. Weitere Informationen finden Sie unter Konfigurieren von Parallelindexvorgängen.For more information, see Configure Parallel Index Operations.

Beim Löschen eines gruppierten Indexes behalten die entsprechenden Heappartitionen ihre Einstellung für die Datenkomprimierung bei, sofern nicht das Partitionierungsschema geändert wird.When a clustered index is dropped, the corresponding heap partitions retain their data compression setting unless the partitioning scheme is modified. Wenn das Partitionierungsschema geändert wird, werden alle Partitionen in einem unkomprimierten Status (DATA_COMPRESSION = NONE) neu erstellt.If the partitioning scheme is changed, all partitions are rebuilt to an uncompressed state (DATA_COMPRESSION = NONE). Um einen gruppierten Index zu löschen und das Partitionierungsschema zu ändern, sind die beiden folgenden Schritte erforderlich:To drop a clustered index and change the partitioning scheme requires the following two steps:

  1. Löschen Sie den gruppierten Index.Drop the clustered index.

  2. Ändern Sie die Tabelle mit der Option ALTER TABLE ... REBUILD ..., die die Komprimierungsoption angibt.Modify the table by using an ALTER TABLE ... REBUILD ... option specifying the compression option.

Wenn ein gruppierter Index OFFLINE gelöscht wird, werden nur die oberen Ebenen des gruppierten Index entfernt. Daher wird dieser Vorgang ziemlich schnell ausgeführt.When a clustered index is dropped OFFLINE, only the upper levels of clustered indexes are removed; therefore, the operation is quite fast. Wenn ein gruppierter Index ONLINE gelöscht wird, erstellt SQL ServerSQL Server den Heap zwei Mal neu, ein Mal für Schritt 1 und ein Mal für Schritt 2.When a clustered index is dropped ONLINE, SQL ServerSQL Server rebuilds the heap two times, once for step 1 and once for step 2. Weitere Informationen zur Datenkomprimierung finden Sie unter Datenkomprimierung.For more information about data compression, see Data Compression.

XML-IndizesXML Indexes

Optionen können nicht angegeben werden, wenn Sie einen XML-Index löschen.Options cannot be specified when you drop anXML index. Darüber hinaus können Sie die Syntax table_or_view_name . index_name nicht verwenden.Also, you cannot use the table_or_view_name.index_name syntax. Wird ein primärer XML-Index gelöscht, werden alle dazugehörigen sekundären XML-Indizes automatisch gelöscht.When a primary XML index is dropped, all associated secondary XML indexes are automatically dropped. Weitere Informationen finden Sie unter XML-Indizes (SQL Server).For more information, see XML Indexes (SQL Server).

Räumliche IndizesSpatial Indexes

Räumliche Indizes werden nur für Tabellen unterstützt.Spatial indexes are supported only on tables. Wenn Sie einen räumlichen Index löschen, können Sie weder Optionen angeben noch . index_name verwenden.When you drop a spatial index, you cannot specify any options or use .index_name. Die korrekte Syntax lautet wie folgt:The correct syntax is as follows:

DROP INDEX spatial_index_name ON spatial_table_name;DROP INDEX spatial_index_name ON spatial_table_name;

Weitere Informationen zu räumlichen Indizes finden Sie unter Übersicht über räumliche Indizes.For more information about spatial indexes, see Spatial Indexes Overview.

BerechtigungenPermissions

Für das Ausführen von DROP INDEX ist mindestens eine ALTER-Berechtigung für die Tabelle oder Sicht erforderlich.To execute DROP INDEX, at a minimum, ALTER permission on the table or view is required. Über diese Berechtigungen verfügen standardmäßig die Mitglieder der festen Serverrolle sysadmin und die Mitglieder der festen Datenbankrollen db_ddladmin und db_owner .This permission is granted by default to the sysadmin fixed server role and the db_ddladmin and db_owner fixed database roles.

BeispieleExamples

A.A. Löschen eines IndexesDropping an index

Im folgenden Beispiel wird der IX_ProductVendor_VendorID-Index für die ProductVendor-Tabelle in der AdventureWorks2012AdventureWorks2012-Datenbank gelöscht.The following example deletes the index IX_ProductVendor_VendorID on the ProductVendor table in the AdventureWorks2012AdventureWorks2012 database.

DROP INDEX IX_ProductVendor_BusinessEntityID   
    ON Purchasing.ProductVendor;  
GO  

B.B. Löschen mehrerer IndizesDropping multiple indexes

Im folgenden Beispiel werden zwei Indizes in einer einzelnen Transaktion in der AdventureWorks2012AdventureWorks2012-Datenbank gelöscht.The following example deletes two indexes in a single transaction in the AdventureWorks2012AdventureWorks2012 database.

DROP INDEX  
    IX_PurchaseOrderHeader_EmployeeID ON Purchasing.PurchaseOrderHeader,  
    IX_Address_StateProvinceID ON Person.Address;  
GO  

C.C. Onlinelöschen eines gruppierten Indexes und Festlegen der MAXDOP-OptionDropping a clustered index online and setting the MAXDOP option

Im folgenden Beispiel wird ein gruppierter Index gelöscht, wobei für die Option ONLINE die Einstellung ON und für MAXDOP die Einstellung 8 festgelegt ist.The following example deletes a clustered index with the ONLINE option set to ON and MAXDOP set to 8. Da die Option MOVE TO nicht angegeben wurde, wird die daraus resultierende Tabelle in der gleichen Dateigruppe wie der Index gespeichert.Because the MOVE TO option was not specified, the resulting table is stored in the same filegroup as the index. In diesem Beispiel wird die AdventureWorks2012AdventureWorks2012-Datenbank verwendet.This examples uses the AdventureWorks2012AdventureWorks2012 database

Gilt für: SQL Server 2008SQL Server 2008 bis SQL Server 2017SQL Server 2017, SQL-DatenbankSQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, SQL-DatenbankSQL Database.

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

D.D. Onlinelöschen eines gruppierten Indexes und Verschieben der Tabelle in eine neue DateigruppeDropping a clustered index online and moving the table to a new filegroup

Im folgenden Beispiel wird ein gruppierter Index online gelöscht, und die daraus resultierende Tabelle (Heap) wird in die Dateigruppe NewGroup verschoben, wofür die MOVE TO -Klausel verwendet wird.The following example deletes a clustered index online and moves the resulting table (heap) to the filegroup NewGroup by using the MOVE TO clause. Die Katalogsichten sys.indexes, sys.tablesund sys.filegroups werden abgefragt, um die Platzierung von Index und Tabelle in den Dateigruppen vor und nach der Verschiebung zu prüfen.The sys.indexes, sys.tables, and sys.filegroups catalog views are queried to verify the index and table placement in the filegroups before and after the move. (Ab SQL Server 2016 (13.x)SQL Server 2016 (13.x) können Sie die Syntax DROP INDEX IF EXISTS verwenden.)(Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x) you can use the DROP INDEX IF EXISTS syntax.)

Gilt für: SQL Server 2008SQL Server 2008 bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

--Create a clustered index on the PRIMARY filegroup if the index does not exist.  
CREATE UNIQUE CLUSTERED INDEX  
    AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate   
        ON Production.BillOfMaterials (ProductAssemblyID, ComponentID,   
        StartDate)  
    ON 'PRIMARY';  
GO  
-- Verify filegroup location of the clustered index.  
SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,  
    i.data_space_id, f.name AS [Filegroup Name]  
FROM sys.indexes AS i  
    JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id  
    JOIN sys.tables as t ON i.object_id = t.object_id  
        AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U')  
GO  
--Create filegroup NewGroup if it does not exist.  
IF NOT EXISTS (SELECT name FROM sys.filegroups  
                WHERE name = N'NewGroup')  
    BEGIN  
    ALTER DATABASE AdventureWorks2012  
        ADD FILEGROUP NewGroup;  
    ALTER DATABASE AdventureWorks2012  
        ADD FILE (NAME = File1,  
            FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\File1.ndf')  
        TO FILEGROUP NewGroup;  
    END  
GO  
--Verify new filegroup  
SELECT * from sys.filegroups;  
GO  
-- Drop the clustered index and move the BillOfMaterials table to  
-- the Newgroup filegroup.  
-- Set ONLINE = OFF to execute this example on editions other than Enterprise Edition.  
DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate   
    ON Production.BillOfMaterials   
    WITH (ONLINE = ON, MOVE TO NewGroup);  
GO  
-- Verify filegroup location of the moved table.  
SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,  
    i.data_space_id, f.name AS [Filegroup Name]  
FROM sys.indexes AS i  
    JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id  
    JOIN sys.tables as t ON i.object_id = t.object_id  
        AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U');  
GO  

E.E. Onlinelöschen einer PRIMARY KEY-EinschränkungDropping a PRIMARY KEY constraint online

Indizes, die als Ergebnis der Erstellung von PRIMARY KEY- oder UNIQUE-Einschränkungen erstellt werden, können nicht mit DROP INDEX gelöscht werden.Indexes that are created as the result of creating PRIMARY KEY or UNIQUE constraints cannot be dropped by using DROP INDEX. Vielmehr werden sie mit der ALTER TABLE DROP CONSTRAINT-Anweisung gelöscht.They are dropped using the ALTER TABLE DROP CONSTRAINT statement. Weitere Informationen finden Sie unter ALTER TABLE.For more information, see ALTER TABLE.

Im folgenden Beispiel wird ein gruppierter Index mit einer PRIMARY KEY-Einschränkung gelöscht, indem die Einschränkung gelöscht wird.The following example deletes a clustered index with a PRIMARY KEY constraint by dropping the constraint. Die Tabelle ProductCostHistory besitzt keine FOREIGN KEY-Einschränkung.The ProductCostHistory table has no FOREIGN KEY constraints. Wenn dem so wäre, müssten diese Einschränkungen zuerst entfernt werden.If it did, those constraints would have to be removed first.

-- Set ONLINE = OFF to execute this example on editions other than Enterprise Edition.  
ALTER TABLE Production.TransactionHistoryArchive  
DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID  
WITH (ONLINE = ON);  

F.F. Löschen eines XMl-IndexesDropping an XML index

Im folgenden Beispiel wird ein XML-Index in der ProductModel-Tabelle der AdventureWorks2012AdventureWorks2012-Datenbank gelöscht.The following example drops an XML index on the ProductModel table in the AdventureWorks2012AdventureWorks2012 database.

DROP INDEX PXML_ProductModel_CatalogDescription   
    ON Production.ProductModel;  

G.G. Löschen eines gruppierten Indexes in einer FILESTREAM-TabelleDropping a clustered index on a FILESTREAM table

Im folgenden Beispiel wird ein gruppierter Index online gelöscht, und die daraus resultierende Tabelle (Heap) und die FILESTREAM-Daten werden in das MyPartitionScheme-Partitionsschema verschoben, wofür die MOVE TO-Klausel und die FILESTREAM ON-Klausel verwendet werden.The following example deletes a clustered index online and moves the resulting table (heap) and FILESTREAM data to the MyPartitionScheme partition scheme by using both the MOVE TO clause and the FILESTREAM ON clause.

Gilt für: SQL Server 2008SQL Server 2008 bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

DROP INDEX PK_MyClusteredIndex   
    ON dbo.MyTable   
    WITH (MOVE TO MyPartitionScheme,  
          FILESTREAM_ON MyPartitionScheme);  
GO  

Weitere InformationenSee Also

ALTER INDEX (Transact-SQL) ALTER INDEX (Transact-SQL)
ALTER PARTITION SCHEME (Transact-SQL) ALTER PARTITION SCHEME (Transact-SQL)
ALTER TABLE (Transact-SQL) ALTER TABLE (Transact-SQL)
CREATE INDEX (Transact-SQL) CREATE INDEX (Transact-SQL)
CREATE PARTITION SCHEME (Transact-SQL) CREATE PARTITION SCHEME (Transact-SQL)
CREATE SPATIAL INDEX (Transact-SQL) CREATE SPATIAL INDEX (Transact-SQL)
CREATE XML INDEX (Transact-SQL) CREATE XML INDEX (Transact-SQL)
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
sys.indexes (Transact-SQL) sys.indexes (Transact-SQL)
sys.tables (Transact-SQL) sys.tables (Transact-SQL)
sys.filegroups (Transact-SQL) sys.filegroups (Transact-SQL)
sp_spaceused (Transact-SQL)sp_spaceused (Transact-SQL)