ALTER INDEX (Transact-SQL)ALTER INDEX (Transact-SQL)

DIESES THEMA GILT FÜR: jaSQL Server (ab 2008)jaAzure SQL-DatenbankjaAzure SQL Data Warehouse jaParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Ändert einen vorhandenen Tabellen- oder Sichtindex (relational oder XML), indem der Index deaktiviert, neu erstellt oder neu organisiert wird oder indem Optionen für den Index festgelegt werden.Modifies an existing table or view index (relational or XML) by disabling, rebuilding, or reorganizing the index; or by setting options on the index.

Themenlinksymbol Transact-SQL Syntax Conventions (Transact-SQL-Syntaxkonventionen)Topic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

-- Syntax for SQL Server and Azure SQL Database

ALTER INDEX { index_name | ALL } ON <object>  
{  
      REBUILD {  
            [ PARTITION = ALL ] [ WITH ( <rebuild_index_option> [ ,...n ] ) ]   
          | [ PARTITION = partition_number [ WITH ( <single_partition_rebuild_index_option> ) [ ,...n ] ]  
      }  
    | DISABLE  
    | REORGANIZE  [ PARTITION = partition_number ] [ WITH ( <reorganize_option>  ) ]  
    | SET ( <set_index_option> [ ,...n ] )   
    | RESUME [WITH (<resumable_index_options>,[…n])]
    | PAUSE
    | ABORT
}  
[ ; ]  

<object> ::=   
{  
    [ database_name. [ schema_name ] . | schema_name. ]   
    table_or_view_name  
}  

<rebuild_index_option > ::=  
{  
      PAD_INDEX = { ON | OFF }  
    | FILLFACTOR = fillfactor   
    | SORT_IN_TEMPDB = { ON | OFF }  
    | IGNORE_DUP_KEY = { ON | OFF }  
    | STATISTICS_NORECOMPUTE = { ON | OFF }  
    | STATISTICS_INCREMENTAL = { ON | OFF }  
    | ONLINE = {   
          ON [ ( <low_priority_lock_wait> ) ]   
        | OFF } 
    | RESUMABLE = { ON | OFF } 
    | MAX_DURATION = <time> [MINUTES}     
    | ALLOW_ROW_LOCKS = { ON | OFF }  
    | ALLOW_PAGE_LOCKS = { ON | OFF }  
    | MAXDOP = max_degree_of_parallelism  
    | COMPRESSION_DELAY = {0 | delay [Minutes]}  
    | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }   
        [ ON PARTITIONS ( {<partition_number> [ TO <partition_number>] } [ , ...n ] ) ]  
}  

<single_partition_rebuild_index_option> ::=  
{  
      SORT_IN_TEMPDB = { ON | OFF }  
    | MAXDOP = max_degree_of_parallelism  
    | RESUMABLE = { ON | OFF } 
    | MAX_DURATION = <time> [MINUTES}     
    | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE} }  
    | ONLINE = { ON [ ( <low_priority_lock_wait> ) ] | OFF }  
}  

<reorganize_option>::=  
{  
       LOB_COMPACTION = { ON | OFF }  
    |  COMPRESS_ALL_ROW_GROUPS =  { ON | OFF}  
}  

<set_index_option>::=  
{  
      ALLOW_ROW_LOCKS = { ON | OFF }  
    | ALLOW_PAGE_LOCKS = { ON | OFF }  
    | IGNORE_DUP_KEY = { ON | OFF }  
    | STATISTICS_NORECOMPUTE = { ON | OFF }  
    | COMPRESSION_DELAY= {0 | delay [Minutes]}  
}  

<resumable_index_option> ::=
 { 
    MAXDOP = max_degree_of_parallelism
    | MAX_DURATION =<time> [MINUTES]
    | <low_priority_lock_wait>  
 }

<low_priority_lock_wait>::=  
{  
    WAIT_AT_LOW_PRIORITY ( MAX_DURATION = <time> [ MINUTES ] ,   
                          ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS } )  
}  
-- Syntax for SQL Data Warehouse and Parallel Data Warehouse 

ALTER INDEX { index_name | ALL }  
    ON   [ schema_name. ] table_name  
{  
      REBUILD {  
            [ PARTITION = ALL [ WITH ( <rebuild_index_option> ) ] ] 
          | [ PARTITION = partition_number [ WITH ( <single_partition_rebuild_index_option> )] ] 
      }  
    | DISABLE  
    | REORGANIZE [ PARTITION = partition_number ]  
}  
[;]  

<rebuild_index_option > ::=   
{  
    DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
        [ ON PARTITIONS ( {<partition_number> [ TO <partition_number>] } [ , ...n ] ) ]   
}

<single_partition_rebuild_index_option > ::=   
{  
    DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }  
}  

ArgumenteArguments

index_nameindex_name
Der Name des Indexes.Is the name of the index. Indexnamen müssen für eine Tabelle oder Sicht eindeutig sein, können aber innerhalb einer Datenbank mehrfach vorkommen.Index names must be unique within a table or view but do not have to be unique within a database. Indexnamen müssen den Regeln der Bezeichner.Index names must follow the rules of identifiers.

ALLALL
Gibt alle Indizes an, die unabhängig vom Indextyp der Tabelle oder Sicht zugeordnet sind.Specifies all indexes associated with the table or view regardless of the index type. Die Angabe von ALL verursacht bei der Anweisung einen Fehler, wenn mindestens ein Index in einer Offlinedateigruppe oder schreibgeschützten Dateigruppe enthalten ist oder der angegebene Vorgang für mindestens einen Indextyp nicht zulässig ist.Specifying ALL causes the statement to fail if one or more indexes are in an offline or read-only filegroup or the specified operation is not allowed on one or more index types. In der folgenden Tabelle werden die Indexvorgänge und die nicht zulässigen Indextypen aufgelistet.The following table lists the index operations and disallowed index types.

Mithilfe des Schlüsselworts ALL mit diesem VorgangUsing the keyword ALL with this operation Erzeugt einen Fehler, wenn mindestens einer dieser Indextypen in der Tabelle enthalten istFails if the table has one or more
REBUILD WITH ONLINE = ONREBUILD WITH ONLINE = ON XML-IndexXML index

Räumlicher IndexSpatial index

Columnstore-Index: gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2012SQL Server 2012) und SQL-DatenbankSQL Database.Columnstore index: Applies to: SQL ServerSQL Server (Starting with SQL Server 2012SQL Server 2012) and SQL-DatenbankSQL Database.
REBUILD PARTITION = PartitionsnummerREBUILD PARTITION = partition_number Nicht partitionierter Index, XML-Index, räumlicher Index oder deaktivierter IndexNonpartitioned index, XML index, spatial index, or disabled index
REORGANIZEREORGANIZE Indizes, für die ALLOW_PAGE_LOCKS auf OFF festgelegt wurdeIndexes with ALLOW_PAGE_LOCKS set to OFF
REORGANIZE PARTITION = PartitionsnummerREORGANIZE PARTITION = partition_number Nicht partitionierter Index, XML-Index, räumlicher Index oder deaktivierter IndexNonpartitioned index, XML index, spatial index, or disabled index
IGNORE_DUP_KEY = ONIGNORE_DUP_KEY = ON XML-IndexXML index

Räumlicher IndexSpatial index

Columnstore-Index: gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2012SQL Server 2012) und SQL-DatenbankSQL Database.Columnstore index: Applies to: SQL ServerSQL Server (Starting with SQL Server 2012SQL Server 2012) and SQL-DatenbankSQL Database.
ONLINE = ONONLINE = ON XML-IndexXML index

Räumlicher IndexSpatial index

Columnstore-Index: gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2012SQL Server 2012) und SQL-DatenbankSQL Database.Columnstore index: Applies to: SQL ServerSQL Server (Starting with SQL Server 2012SQL Server 2012) and SQL-DatenbankSQL Database.
FORTSETZBARE = ONRESUMABLE = ON Fortsetzbare Indizes nicht unterstützt, mit alle Schlüsselwort.Resumable indexes not supported with All keyword.

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2017SQL Server 2017) und SQL-DatenbankSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017SQL Server 2017) and SQL-DatenbankSQL Database

Warnung

Ausführlichere Informationen zu indexvorgängen, die online ausgeführt werden können, finden Sie unter Richtlinien für Onlineindexvorgänge.For more detailed information about index operations that can be performed online, see Guidelines for Online Index Operations.

Bei Angabe von ALL mit PARTITION = Partition_number, müssen alle Indizes ausgerichtet sein.If ALL is specified with PARTITION = partition_number, all indexes must be aligned. Das bedeutet, dass sie auf der Grundlage der entsprechenden Partitionsfunktionen partitioniert sind.This means that they are partitioned based on equivalent partition functions. Verwenden von ALL mit PARTITION führt dazu, dass alle Indexpartitionen mit demselben Partition_number neu erstellt oder neu organisiert werden.Using ALL with PARTITION causes all index partitions with the same partition_number to be rebuilt or reorganized. Weitere Informationen zu partitionierten Indizes finden Sie unter Partitioned Tables and Indexes.For more information about partitioned indexes, see Partitioned Tables and Indexes.

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. Um einen Bericht über die Indizes eines Objekts anzuzeigen, verwenden die sys.indexes -Katalogsicht angezeigt.To display a report of the indexes on an object, use the sys.indexes catalog view.

SQL-DatenbankSQL Databaseunterstützt drei Teilen bestehende Format Database_name. [Schema_name] .table_or_view_name Wenn Database_name die aktuelle Datenbank oder Database_name Tempdb und den Table_or_view_name beginnt mit #. supports the three-part name format database_name.[schema_name].table_or_view_name when the database_name is the current database or the database_name is tempdb and the table_or_view_name starts with #.

REBUILD [WITH (<Rebuild_index_option > [ ,... n]) ]REBUILD [ WITH (<rebuild_index_option> [ ,... n]) ]
Gibt an, dass der Index mit denselben Spalten, demselben Indextyp, demselben Eindeutigkeitsattribut und derselben Sortierreihenfolge neu erstellt wird.Specifies the index will be rebuilt using the same columns, index type, uniqueness attribute, and sort order. Diese Klausel entspricht DBCC DBREINDEX.This clause is equivalent to DBCC DBREINDEX. Mit REBUILD wird ein deaktivierter Index aktiviert.REBUILD enables a disabled index. Durch das Neuerstellen eines gruppierten Indexes erfolgt nicht die Neuerstellung von zugeordneten nicht gruppierten Indizes, es sei denn, das Schlüsselwort ALL ist angegeben.Rebuilding a clustered index does not rebuild associated nonclustered indexes unless the keyword ALL is specified. Wenn Indexoptionen nicht angegeben werden, die vorhandenen Indexoptionen in gespeicherten sys.indexes angewendet werden.If index options are not specified, the existing index option values stored in sys.indexes are applied. Für alle Indexoptionen, deren Wert sich nicht in befindet sys.indexes, gilt die Standardeinstellung, die in der argumentdefinition der Option angegeben.For any index option whose value is not stored in sys.indexes, the default indicated in the argument definition of the option applies.

Wenn ALL angegeben ist und die zugrunde liegende Tabelle ein Heap ist, hat die Neuerstellung keine Auswirkungen auf die Tabelle.If ALL is specified and the underlying table is a heap, the rebuild operation has no effect on the table. Alle nicht gruppierten Indizes, die der Tabelle zugeordnet sind, werden neu erstellt.Any nonclustered indexes associated with the table are rebuilt.

Der Neuerstellungsvorgang kann minimal protokolliert werden, wenn die Datenbankwiederherstellung auf das massenprotokollierte oder einfache Wiederherstellungsmodell festgelegt ist.The rebuild operation can be minimally logged if the database recovery model is set to either bulk-logged or simple.

Hinweis

Wenn Sie einen primären XML-Index neu erstellen, ist die zugrunde liegende Benutzertabelle während des Indexvorgangs nicht verfügbar.When you rebuild a primary XML index, the underlying user table is unavailable for the duration of the index operation.

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2012SQL Server 2012) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2012SQL Server 2012) and SQL-DatenbankSQL Database.

Für columnstore-Indizes, der Neuerstellungsvorgang:For columnstore indexes, the rebuild operation:

  1. Die Sortierreihenfolge wird nicht verwendet werden.Does not use the sort order.

  2. Abrufen einer exklusiven Sperre für die Tabelle oder Partition, während die Neuerstellung ausgeführt wird.Acquires an exclusive lock on the table or partition while the rebuild occurs. Die Daten sind während der Neuerstellung „offline“ und nicht verfügbar, sogar wenn Sie NOLOCK, RCSI oder SI verwenden.The data is “offline” and unavailable during the rebuild, even when using NOLOCK, RCSI, or SI.

  3. Neukomprimierung aller Daten im Columnstore.Re-compresses all data into the columnstore. Während die Neuerstellung ausgeführt wird, gibt es zwei Kopien des columnstore-Indexes.Two copies of the columnstore index exist while the rebuild is taking place. Nach Abschluss der Neuerstellung wird der ursprüngliche columnstore-Index in SQL ServerSQL Server gelöscht.When the rebuild is finished, SQL ServerSQL Server deletes the original columnstore index.

    Weitere Informationen zu columnstore-Indizes neu erstellt werden, finden Sie unter columnstore-Indizes - DefragmentierungFor more information about rebuilding columnstore indexes, see Columnstore indexes - defragmentation

PARTITIONPARTITION

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2008SQL Server 2008) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL-DatenbankSQL Database.

Gibt an, dass nur eine Partition eines Indexes neu erstellt oder neu organisiert wird.Specifies that only one partition of an index will be rebuilt or reorganized. PARTITION kann nicht angegeben werden, wenn Index_name ist kein partitionierter Index.PARTITION cannot be specified if index_name is not a partitioned index.

PARTITION = ALL erstellt alle Partitionen neu.PARTITION = ALL rebuilds all partitions.

Warnung

Das Erstellen bzw. Neuerstellen von nicht ausgerichteten Indizes für eine Tabelle mit mehr als 1.000 Partitionen ist möglich, wird aber nicht unterstützt.Creating and rebuilding nonaligned indexes on a table with more than 1,000 partitions is possible, but is not supported. Dies hätte Leistungseinbußen oder eine zu hohe Speicherauslastung während der Vorgänge zur Folge.Doing so may cause degraded performance or excessive memory consumption during these operations. Es empfiehlt sich, bei mehr als 1.000 Partitionen nur ausgerichtete Indizes zu verwenden.We recommend using only aligned indexes when the number of partitions exceed 1,000.

partition_numberpartition_number

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2008SQL Server 2008) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL-DatenbankSQL Database.

Die Partitionsnummer eines partitionierten Indexes, der neu erstellt oder neu organisiert werden soll.Is the partition number of a partitioned index that is to be rebuilt or reorganized. Partitionsnummer ist ein konstanter Ausdruck, die auf Variablen verweisen kann.partition_number is a constant expression that can reference variables. Bei diesen Variablen kann es sich um Funktionen und benutzerdefinierte Variablen oder Funktionen handeln, die jedoch nicht auf eine Transact-SQLTransact-SQL-Anweisung verweisen können.These include user-defined type variables or functions and user-defined functions, but cannot reference a Transact-SQLTransact-SQL statement. Partitionsnummer muss vorhanden sein, oder die Anweisung schlägt fehl.partition_number must exist or the statement fails.

MIT (<Single_partition_rebuild_index_option >)WITH (<single_partition_rebuild_index_option>)

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2008SQL Server 2008) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL-DatenbankSQL Database.

SORT_IN_TEMPDB, MAXDOP und DATA_COMPRESSION sind die Optionen, die angegeben werden können, wenn Sie eine einzelne Partition neu erstellen (PARTITION = n ).SORT_IN_TEMPDB, MAXDOP, and DATA_COMPRESSION are the options that can be specified when you rebuild a single partition (PARTITION = n). XML-Indizes können nicht bei der Neuerstellung einer einzelnen Partition angegeben werden.XML indexes cannot be specified in a single partition rebuild operation.

DISABLEDISABLE
Markiert den Index als deaktiviert und als nicht verfügbar für das DatenbankmodulDatabase Engine.Marks the index as disabled and unavailable for use by the DatenbankmodulDatabase Engine. Jeder Index kann deaktiviert werden.Any index can be disabled. Die Indexdefinition eines deaktivierten Indexes bleibt weiterhin im Systemkatalog ohne zugrunde liegende Indexdaten bestehen.The index definition of a disabled index remains in the system catalog with no underlying index data. Durch das Deaktivieren eines gruppierten Indexes wird der Benutzerzugriff auf die zugrunde liegenden Tabellendaten verhindert.Disabling a clustered index prevents user access to the underlying table data. Verwenden Sie ALTER INDEX REBUILD oder CREATE INDEX WITH DROP_EXISTING, um einen Index zu aktivieren.To enable an index, use ALTER INDEX REBUILD or CREATE INDEX WITH DROP_EXISTING. Weitere Informationen finden Sie unter Deaktivieren von Indizes und Einschränkungen und Enable Indexes and Constraints.For more information, see Disable Indexes and Constraints and Enable Indexes and Constraints.

Einen Rowstore-Index neu organisierenREORGANIZE a rowstore index
Gibt an für Rowstore-Indizes neu organisieren der Blattebene des Indexes neu zu organisieren.For rowstore indexes, REORGANIZE specifies to reorganize the index leaf level. Der neuorganisationsvorgang wird:The REORGANIZE operation is:

  • Immer online ausgeführt.Always performed online. Das bedeutet, dass blockierende Langzeitsperren für Tabellen nicht aufrechterhalten werden und Abfragen oder Updates der zugrunde liegenden Tabelle während der ALTER INDEX REORGANIZE-Transaktion fortgesetzt werden können.This means long-term blocking table locks are not held and queries or updates to the underlying table can continue during the ALTER INDEX REORGANIZE transaction.

  • Für einen deaktivierten Index zulässig nicht.Not allowed for a disabled index

  • Nicht zulässig, wenn ALLOW_PAGE_LOCKS auf OFF festgelegt istNot allowed when ALLOW_PAGE_LOCKS is set to OFF

  • Nicht zurückgesetzt werden, wenn sie innerhalb einer Transaktions ausgeführt wird und die Transaktion zurückgesetzt wird.Not rolled back when it is performed within a transaction and the transaction is rolled back.

REORGANIZE MIT ( LOB_COMPACTION = { ON | {OFF} )REORGANIZE WITH ( LOB_COMPACTION = { ON | OFF } )
Gilt für Rowstore-Indizes.Applies to rowstore indexes.

LOB_COMPACTION = ONLOB_COMPACTION = ON

  • Gibt an, dass alle Seiten komprimiert, die Daten dieser Datentypen für große Objekte (LOB) enthalten: Image, Text, Ntext, varchar(max), nvarchar(max), varbinary(max) und Xml.Specifies to compact all pages that contain data of these large object (LOB) data types: image, text, ntext, varchar(max), nvarchar(max), varbinary(max), and xml. Durch das Komprimieren dieser Daten kann Daten auf der Festplatte verkleinern.Compacting this data can reduce the data size on disk.

  • Für einen gruppierten Index komprimiert dies alle LOB-Spalten, die in der Tabelle enthalten sind.For a clustered index, this compacts all LOB columns that are contained in the table.

  • Für einen nicht gruppierten Index werden diese alle LOB-Spalten, die (eingeschlossene) Nichtschlüsselspalten im Index komprimiert.For a nonclustered index, this compacts all LOB columns that are nonkey (included) columns in the index.

  • ALLE neu organisieren führt LOB_COMPACTION auf alle Indizes ein.REORGANIZE ALL performs LOB_COMPACTION on all indexes. Für jeden Index komprimiert dies alle LOB-Spalten im gruppierten Index, in der zugrunde liegenden Tabelle oder eingeschlossene Spalten in einem nicht gruppierten Index.For each index, this compacts all LOB columns in the clustered index, underlying table, or included columns in a nonclustered index.

LOB_COMPACTION = OFFLOB_COMPACTION = OFF

  • Seiten, die LOB-Daten enthalten, werden nicht komprimiert.Pages that contain large object data are not compacted.

  • Die Einstellung OFF hat keine Auswirkungen auf einen Heap.OFF has no effect on a heap.

Einen columnstore-Index neu organisierenREORGANIZE a columnstore index
REORGANIZE ist online durchgeführt.REORGANIZE is performed online.

Für columnstore-Indizes komprimiert REORGANIZE jede GESCHLOSSENEN Delta-Zeilengruppe im Columnstore als eine komprimierte Zeilengruppe.For columnstore indexes, REORGANIZE compresses each CLOSED delta rowgroup into the columnstore as a compressed rowgroup.

  • REORGANIZE ist nicht erforderlich, um die GESCHLOSSENEN Delta-Zeilengruppen in komprimierte Zeilengruppen verschoben.REORGANIZE is not required in order to move CLOSED delta rowgroups into compressed rowgroups. Der Hintergrund (TM) tupelverschiebungsvorgang reaktiviert, in regelmäßigen Abständen GESCHLOSSENEN Delta-Zeilengruppen zu komprimieren.The background tuple-mover (TM) process wakes up periodically to compress CLOSED delta rowgroups. Es wird empfohlen, REORGANIZE verwenden, wenn Tuple Mover im Rückstand ist.We recommend using REORGANIZE when tuple-mover is falling behind. REORGANIZE kann Zeilengruppen genauer komprimieren.REORGANIZE can compress rowgroups more aggressively.

  • Um alle öffnen "und" CLOSED-Zeilengruppen zu komprimieren, finden Sie unter der Option REORGANIZE mit (COMPRESS_ALL_ROW_GROUPS) in diesem Abschnitt.To compress all OPEN and CLOSED rowgroups, see the REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS) option in this section.

Für columnstore-Indizes in SQL ServerSQL Server (ab 2016) und SQL-DatenbankSQL Database, REORGANIZE führt die folgenden Optimierungen für zusätzliche Defragmentierung online:For columnstore indexes in SQL ServerSQL Server (Starting with 2016) and SQL-DatenbankSQL Database, REORGANIZE performs the following additional defragmentation optimizations online:

  • Physisch entfernt Zeilen aus einer Zeilengruppe, wenn mindestens 10 % der Zeilen logisch gelöscht wurden.Physically removes rows from a rowgroup when 10% or more of the rows have been logically deleted. Die gelöschten Bytes werden auf dem physischen Medium freigegeben.The deleted bytes are reclaimed on the physical media. Beispielsweise verfügt eine komprimierte Zeilengruppe mit 1 Million Zeilen 100 KB Zeilen gelöscht, SQL Server die gelöschten Zeilen zu entfernen und komprimieren die Zeilengruppe mit 900 k-Zeilen.For example, if a compressed row group of 1 million rows has 100K rows deleted, SQL Server will remove the deleted rows and recompress the rowgroup with 900k rows. Er speichert im Speicher durch Entfernen von gelöschten Zeilen.It saves on the storage by removing deleted rows.

  • Kombiniert einen oder mehrere komprimierte Zeilengruppen, um Zeilen pro Zeilengruppe das Maximum von 1,024,576 Zeilen zu erhöhen.Combines one or more compressed rowgroups to increase rows per rowgroup up to the maximum of 1,024,576 rows. Z. B. Wenn Sie einen Massenexport 5 Batches von 102.400 Zeilen importieren erhalten Sie 5 komprimierte Zeilengruppen.For example, if you bulk import 5 batches of 102,400 rows you will get 5 compressed rowgroups. Wenn Sie die REORGANIZE ausführen, werden diese Zeilengruppen in 1 komprimierte Zeilengruppe Größe 512,000 Zeilen zusammengeführt abrufen.If you run REORGANIZE, these rowgroups will get merged into 1 compressed rowgroup of size 512,000 rows. Dies setzt voraus, dass es kein Wörterbuch Größe oder zu speicherbeschränkungen waren.This assumes there were no dictionary size or memory limitations.

  • Bei Zeilengruppen, in denen mindestens 10 % der Zeilen logisch gelöscht wurden, versucht SQL Server, die dieser Zeilengruppe mit ein oder mehrere Zeilengruppen zu kombinieren.For rowgroups in which 10% or more of the rows have been logically deleted, SQL Server will try to combine this rowgroup with one or more rowgroups. Beispielsweise Zeilengruppe 1 mit 500.000 Zeilen komprimiert wird und Zeilengruppe 21 mit dem Maximum von 1.048.576 Zeilen komprimiert wird.For example, rowgroup 1 is compressed with 500,000 rows and rowgroup 21 is compressed with the maximum of 1,048,576 rows. Zeilengruppe 21 hat 60 % der Zeilen gelöscht 409,830 Zeilen zu verwerfen.Rowgroup 21 has 60% of the rows deleted which leaves 409,830 rows. SQL Server wird bevorzugt, kombinieren diese zwei Zeilengruppen, um eine neue Zeilengruppe zu komprimieren, die 909,830 Zeilen enthält.SQL Server favors combining these two rowgroups to compress a new rowgroup that has 909,830 rows.

MIT NEU ORGANISIEREN (COMPRESS_ALL_ROW_GROUPS = {ON | OFF })REORGANIZE WITH ( COMPRESS_ALL_ROW_GROUPS = { ON | OFF } )

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2016SQL Server 2016) und SQL-DatenbankSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2016SQL Server 2016) and SQL-DatenbankSQL Database

COMPRESS_ALL_ROW_GROUPS bietet eine Möglichkeit zum Öffnen oder CLOSED Delta-Zeilengruppen in den Columnstore zu zwingen.COMPRESS_ALL_ROW_GROUPS provides a way to force OPEN or CLOSED delta rowgroups into the columnstore. Mit dieser Option ist es nicht notwendig, um die Delta-Zeilengruppen zu leeren der columnstore-Index neu.With this option, it is not necessary to rebuild the columnstore index to empty the delta rowgroups. In Kombination mit dem anderen entfernen und Merge Defragmentierung Funktionen wird nicht mehr notwendig, dass der Index in den meisten Situationen neu erstellt.This, combined with the other remove and merge defragmentation features makes it no longer necessary to rebuild the index in most situations.

  • ON erzwingt, dass alle Zeilengruppen in den Columnstore, unabhängig von der Größe und Status (geschlossen oder geöffnet).ON forces all rowgroups into the columnstore, regardless of size and state (CLOSED or OPEN).

  • Erzwingt die deaktiviert alle CLOSED-Zeilengruppen in den Columnstore.OFF forces all CLOSED rowgroups into the columnstore.

Legen Sie ( <Set_index Option > [ ,... n] )SET ( <set_index option> [ ,... n] )
Gibt Indexoptionen ohne das Neuerstellen oder Neuorganisieren des Indexes an.Specifies index options without rebuilding or reorganizing the index. SET kann für einen deaktivierten Index nicht angegeben werden.SET cannot be specified for a disabled index.

PAD_INDEX = { ON | OFF }PAD_INDEX = { ON | OFF }

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2008SQL Server 2008) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL-DatenbankSQL Database.

Gibt die Auffüllung von Indizes an.Specifies index padding. Der Standardwert ist OFF.The default is OFF.

ONON
Der Prozentsatz des mit FILLFACTOR angegebenen freien Speicherplatzes wird für die Zwischenebenenseiten des Indexes angewendet.The percentage of free space that is specified by FILLFACTOR is applied to the intermediate-level pages of the index. Wenn FILLFACTOR nicht angegeben wird zur gleichen Zeit PAD_INDEX auf ON festgelegt ist, die gespeicherte Füllfaktorwert sys.indexes verwendet wird.If FILLFACTOR is not specified at the same time PAD_INDEX is set to ON, the fill factor value stored in sys.indexes is used.

Deaktivieren oder Fillfactor ist nicht angegeben.OFF or fillfactor is not specified
Die Zwischenebenenseiten werden nahezu vollständig gefüllt.The intermediate-level pages are filled to near capacity. Dabei bleibt genügend Platz für mindestens eine Zeile der maximal zulässigen Größe eines Indexes erhalten. Dies erfolgt auf der Grundlage des Schlüsselsatzes in den Zwischenseiten.This leaves sufficient space for at least one row of the maximum size that the index can have, based on the set of keys on the intermediate pages.

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

FILLFACTOR = fillfactorFILLFACTOR = fillfactor

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2008SQL Server 2008) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL-DatenbankSQL Database.

Gibt einen Prozentwert an, der dem Füllfaktor entspricht. Dieser Faktor legt fest, wie weit die DatenbankmodulDatabase Engine die Blattebene jeder Indexseite während der Indexerstellung oder -änderung auffüllen soll. Specifies a percentage that indicates how full the DatenbankmodulDatabase Engine should make the leaf level of each index page during index creation or alteration. FILLFACTOR muss ein ganzzahliger Wert zwischen 1 und 100 sein.fillfactor must be an integer value from 1 to 100. Die Standardeinstellung ist 0.The default is 0. Die Füllfaktorwerte 0 und 100 sind in jeder Hinsicht identisch.Fill factor values 0 and 100 are the same in all respects.

Eine explizite FILLFACTOR-Einstellung gilt nur bei der erstmaligen Erstellung oder bei der Neuerstellung des Indexes.An explicit FILLFACTOR setting applies only when the index is first created or rebuilt. DatenbankmodulDatabase Engine hält den angegebenen Prozentsatz des Speicherplatzes nicht dynamisch auf den Seiten frei.The DatenbankmodulDatabase Engine does not dynamically keep the specified percentage of empty space in the pages. Weitere Informationen finden Sie unter CREATE INDEX (Transact-SQL).For more information, see CREATE INDEX (Transact-SQL).

Verwenden Sie zum Anzeigen der füllfaktoreinstellung sys.indexes.To view the fill factor setting, use sys.indexes.

Wichtig

Das Erstellen oder Ändern eines gruppierten Indexes mit einem FILLFACTOR-Wert wirkt sich auf den Speicherplatz aus, den die Daten belegen, da das DatenbankmodulDatabase Engine die Daten beim Erstellen des gruppierten Indexes neu verteilt.Creating or altering a clustered index with a FILLFACTOR value affects the amount of storage space the data occupies, because the DatenbankmodulDatabase Engine redistributes the data when it creates the clustered index.

SORT_IN_TEMPDB = { ON | OFF }SORT_IN_TEMPDB = { ON | OFF }

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2008SQL Server 2008) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL-DatenbankSQL Database.

Gibt an, ob zum Speichern der Ergebnisse des Sortierens in Tempdb.Specifies whether to store the sort results in tempdb. Der Standardwert ist OFF.The default is OFF.

ONON
Die Zwischenergebnisse, die zum Erstellen des Indexes verwendet werden, sind in gespeicherten Tempdb.The intermediate sort results that are used to build the index are stored in tempdb. Wenn Tempdb wird auf einem anderen Datenträgersatz befindet als die Benutzerdatenbank, kann dies die Zeit zum Erstellen eines Indexes reduzieren.If tempdb is on a different set of disks than the user database, this may reduce the time needed to create an index. Sie erhöht jedoch den Betrag an Speicherplatz, der während der Indexerstellung verwendet wird.However, this increases the amount of disk space that is used during the index build.

OFFOFF
Die Zwischenergebnisse der Sortierung werden in derselben Datenbank gespeichert wie der Index.The intermediate sort results are stored in the same database as the index.

Wenn kein Sortierungsvorgang erforderlich ist oder wenn die Sortierung im Arbeitsspeicher ausgeführt werden kann, wird die SORT_IN_TEMPDB-Option ignoriert.If a sort operation is not required, or if the sort can be performed in memory, the SORT_IN_TEMPDB option is ignored.

Weitere Informationen finden Sie unter SORT_IN_TEMPDB-Option für Indizes.For more information, see SORT_IN_TEMPDB Option For Indexes.

IGNORE_DUP_KEY = { ON | OFF }IGNORE_DUP_KEY = { ON | OFF }
Gibt die Fehlermeldung an, wenn ein Einfügevorgang versucht, doppelte Schlüsselwerte in einen eindeutigen Index einzufügen.Specifies the error response when an insert operation attempts to insert duplicate key values into a unique index. Die IGNORE_DUP_KEY-Option gilt nur für Einfügevorgänge nach dem Erstellen oder Neuerstellen des Index.The IGNORE_DUP_KEY option applies only to insert operations after the index is created or rebuilt. Der Standardwert ist OFF.The default is OFF.

ONON
Eine Warnmeldung wird ausgegeben, wenn doppelte Schlüsselwerte in einen eindeutigen Index eingefügt werden.A warning message will occur when duplicate key values are inserted into a unique index. Es schlagen nur die Zeilen fehl, die gegen die Eindeutigkeitseinschränkung verstoßen.Only the rows violating the uniqueness constraint will fail.

OFFOFF
Eine Fehlermeldung wird ausgegeben, wenn doppelte Schlüsselwerte in einen eindeutigen Index eingefügt werden.An error message will occur when duplicate key values are inserted into a unique index. Für den gesamten INSERT-Vorgang wird ein Rollback ausgeführt.The entire INSERT operation will be rolled back.

IGNORE_DUP_KEY cannot be set to ON for indexes created on a view, non-unique indexes, XML indexes, spatial indexes, and filtered indexes.IGNORE_DUP_KEY cannot be set to ON for indexes created on a view, non-unique indexes, XML indexes, spatial indexes, and filtered indexes.

Um IGNORE_DUP_KEY anzuzeigen, verwenden Sie sys.indexes.To view IGNORE_DUP_KEY, use sys.indexes.

In abwärtskompatibler Syntax ist WITH IGNORE_DUP_KEY gleichwertig mit WITH IGNORE_DUP_KEY = ON.In backward compatible syntax, WITH IGNORE_DUP_KEY is equivalent to WITH IGNORE_DUP_KEY = ON.

STATISTICS_NORECOMPUTE = { ON | OFF }STATISTICS_NORECOMPUTE = { ON | OFF }
Gibt an, ob Verteilungsstatistiken neu berechnet werden.Specifies whether distribution statistics are recomputed. Der Standardwert ist OFF.The default is OFF.

ONON
Veraltete Indexstatistiken werden nicht automatisch neu berechnet.Out-of-date statistics are not automatically recomputed.

OFFOFF
Die automatischen Updates der Statistiken sind aktiviert.Automatic statistics updating are enabled.

Um das automatische Aktualisieren von Statistiken wiederherzustellen, müssen Sie STATISTICS_NORECOMPUTE auf OFF festlegen oder die UPDATE STATISTICS-Anweisung ohne die NORECOMPUTE-Klausel ausführen.To restore automatic statistics updating, set the STATISTICS_NORECOMPUTE to OFF, or execute UPDATE STATISTICS without the NORECOMPUTE clause.

Wichtig

Wenn Sie die automatische Neuberechnung von Verteilungsstatistiken deaktivieren, wählt der Abfrageoptimierer möglicherweise nicht die optimalen Ausführungspläne für Abfragen, an denen die Tabelle beteiligt ist.Disabling automatic recomputation of distribution statistics may prevent the query optimizer from picking optimal execution plans for queries that involve the table.

STATISTICS_INCREMENTAL = { ON | OFF }STATISTICS_INCREMENTAL = { ON | OFF }
Wenn ON, die Statistiken erstellt werden, pro Partition.When ON, the statistics created are per partition statistics. Wenn OFF, wird die statistikstruktur gelöscht und SQL ServerSQL Server die Statistiken neu berechnet.When OFF, the statistics tree is dropped and SQL ServerSQL Server re-computes the statistics. Die Standardeinstellung ist OFF.The default is OFF.

Wenn Statistiken pro Partition nicht unterstützt werden, wird die Option ignoriert und eine Warnung generiert.If per partition statistics are not supported the option is ignored and a warning is generated. Inkrementelle Statistiken werden für folgende Statistiktypen nicht unterstützt:Incremental stats are not supported for following statistics types:

  • Statistiken, die mit Indizes erstellt wurden, die über keine Partitionsausrichtung mit der Basistabelle verfügen.Statistics created with indexes that are not partition-aligned with the base table.
  • Statistiken, die für lesbare sekundäre Always On-Datenbanken erstellt wurden.Statistics created on Always On readable secondary databases.
  • Statistiken, die für schreibgeschützte Datenbanken erstellt wurden.Statistics created on read-only databases.
  • Statistiken, die für gefilterte Indizes erstellt wurden.Statistics created on filtered indexes.
  • Statistiken, die für Sichten erstellt wurden.Statistics created on views.
  • Statistiken, die für interne Tabellen erstellt wurden.Statistics created on internal tables.
  • Statistiken, die mit räumlichen Indizes oder XML-Indizes erstellt wurden.Statistics created with spatial indexes or XML indexes.

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2014SQL Server 2014) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2014SQL Server 2014) and SQL-DatenbankSQL Database.

ONLINE = {ON | OFF } <wie für Rebuild_index_option >ONLINE = { ON | OFF } <as applies to rebuild_index_option>
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.

Bei XML-Indizes oder räumlichen Indizes wird nur ONLINE = OFF unterstützt, und wenn ONLINE auf ON festgelegt wird, wird ein Fehler ausgelöst.For an XML index or spatial index, only ONLINE = OFF is supported, and if ONLINE is set to ON an error is raised.

Hinweis

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

ONON
Lang andauernde Sperren werden nicht für die Dauer des Indexvorgangs aufrechterhalten.Long-term table locks are not held for the duration of the index operation. Während der Hauptphase des Indexvorgangs wird nur eine beabsichtigte freigegebene Sperre (IS) für die Quelltabelle aufrechterhalten.During the main phase of the index operation, only an Intent Share (IS) lock is held on the source table. Auf diese Weise können Abfragen oder Updates der zugrunde liegenden Tabelle und Indizes fortgesetzt werden.This allows queries or updates to the underlying table and indexes to continue. Zu Beginn des Vorgangs wird das Quellobjekt für sehr kurze Zeit mit einer gemeinsamen Sperre (S) belegt.At the start of the operation, a Shared (S) lock is very briefly held on the source object. Am Ende des Vorgangs wird für kurze Zeit eine S-Sperre für die Quelle eingerichtet, wenn ein nicht gruppierter Index erstellt wird, oder es wird eine Sch-M-Sperre (Schema Modification, Schemaänderung) eingerichtet, wenn ein gruppierter Index online erstellt oder gelöscht wird oder wenn ein gruppierter oder nicht gruppierter Index neu erstellt wird.At the end of the operation, an S lock is very briefly held on the source if a nonclustered index is being created, or an SCH-M (Schema Modification) lock is acquired when a clustered index is created or dropped online, or when a clustered or nonclustered index is being rebuilt. ONLINE kann nicht auf ON festgelegt werden, wenn ein Index auf einer lokalen temporären Tabelle erstellt wird.ONLINE cannot be set to ON when an index is being created on a local temporary table.

OFFOFF
Die Tabellensperren werden für die Dauer des Indexvorgangs angewendet.Table locks are applied for the duration of the index operation. Ein Offlineindexvorgang, durch den ein gruppierter, räumlicher oder XML-Index erstellt, neu erstellt oder gelöscht wird bzw. ein nicht gruppierter Index neu erstellt oder gelöscht wird, aktiviert eine Sch-M-Sperre für die Tabelle.An offline index operation that creates, rebuilds, or drops a clustered, spatial, or XML index, or rebuilds or drops a nonclustered index, acquires a Schema modification (Sch-M) lock on the table. Dadurch wird verhindert, dass Benutzer für die Dauer des Vorgangs auf die zugrunde liegende Tabelle zugreifen können.This prevents all user access to the underlying table for the duration of the operation. Ein Offlineindexvorgang, bei dem ein nicht gruppierter Index erstellt wird, aktiviert eine freigegebene Sperre (S) für die Tabelle.An offline index operation that creates a nonclustered index acquires a Shared (S) lock on the table. Dadurch werden Updates der zugrunde liegenden Tabelle verhindert. Lesevorgänge, wie SELECT-Anweisungen, sind jedoch zulässig.This prevents updates to the underlying table but allows read operations, such as SELECT statements.

Weitere Informationen finden Sie unter wie Onlineindexvorgängen.For more information, see How Online Index Operations Work.

Indizes, einschließlich Indizes globaler temporärer Tabellen, können online neu erstellt werden, mit Ausnahme von:Indexes, including indexes on global temp tables, can be rebuilt online with the following exceptions:

  • XML-IndizesXML indexes

  • Indizes für lokale temporäre TabellenIndexes on local temp tables

  • Eine Teilmenge eines partitionierten Indexes (ein vollständiger partitionierter Index kann online neu erstellt werden).A subset of a partitioned index (An entire partitioned index can be rebuilt online.)

  • SQL-DatenbankSQL Databasevor V12, und SQL Server vor SQL Server 2012SQL Server 2012, lässt nicht die ONLINE option für den gruppierten Index erstellen oder Vorgänge neu zu erstellen, wenn die Basistabelle enthält varchar(max) oder varbinary(max) Spalten. prior to V12, and SQL Server prior to SQL Server 2012SQL Server 2012, do not permit the ONLINE option for clustered index build or rebuild operations when the base table contains varchar(max) or varbinary(max) columns.

RESUMABLE = { ON | OFF}RESUMABLE = { ON | OFF}

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2017SQL Server 2017) und SQL-DatenbankSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017SQL Server 2017) and SQL-DatenbankSQL Database

Gibt an, ob ein Onlineindexvorgang kann wieder aufgenommen wird.Specifies whether an online index operation is resumable.

Index ist der Vorgang fortgesetzt werden können.ON Index operation is resumable.

DEAKTIVIERT den Index ist der Vorgang nicht fortgesetzt werden können.OFF Index operation is not resumable.

MAX_DURATION = time [MINUTES] used with RESUMABLE = ON (requires ONLINE = ON).MAX_DURATION = time [MINUTES] used with RESUMABLE = ON (requires ONLINE = ON).

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2017SQL Server 2017) und SQL-DatenbankSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017SQL Server 2017) and SQL-DatenbankSQL Database

Gibt die Zeit (ein Integerwert in Minuten angegeben), dass eine fortsetzbar online-Vorgang Index werden ausgeführt, bevor er angehalten wurde.Indicates time (an integer value specified in minutes) that a resumable online index operation is executed before being paused.

ALLOW_ROW_LOCKS = { ON | {OFF}ALLOW_ROW_LOCKS = { ON | OFF }

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2008SQL Server 2008) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL-DatenbankSQL Database.

Gibt an, ob Zeilensperren zulässig sind.Specifies whether row locks are allowed. Der Standardwert ist ON.The default is ON.

ONON
Zeilensperren sind beim Zugriff auf den Index zulässig.Row locks are allowed when accessing the index. Das DatenbankmodulDatabase Engine bestimmt, wann Zeilensperren verwendet werden.The DatenbankmodulDatabase Engine determines when row locks are used.

OFFOFF
Zeilensperren werden nicht verwendet.Row locks are not used.

ALLOW_PAGE_LOCKS = { ON | {OFF}ALLOW_PAGE_LOCKS = { ON | OFF }

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2008SQL Server 2008) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL-DatenbankSQL Database.

Gibt an, ob Seitensperren zulässig sind.Specifies whether page locks are allowed. Der Standardwert ist ON.The default is ON.

ONON
Seitensperren sind beim Zugriff auf den Index zulässig.Page locks are allowed when you access the index. Das DatenbankmodulDatabase Engine bestimmt, wann Seitensperren verwendet werden.The DatenbankmodulDatabase Engine determines when page locks are used.

OFFOFF
Seitensperren werden nicht verwendet.Page locks are not used.

Hinweis

Ein Index kann nicht neu organisiert werden, wenn ALLOW_PAGE_LOCKS auf OFF festgelegt ist.An index cannot be reorganized when ALLOW_PAGE_LOCKS is set to OFF.

MAXDOP = Max_degree_of_parallelismMAXDOP = max_degree_of_parallelism

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2008SQL Server 2008) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL-DatenbankSQL Database.

Überschreibt die Max. Grad an Parallelität Konfigurationsoption 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

Obwohl die MAXDOP-Option syntaktisch für alle XML-Indizes unterstützt wird, verwendet ALTER INDEX gegenwärtig für einen räumlichen Index oder einen primären XML-Index nur einen einzelnen Prozessor.Although the MAXDOP option is syntactically supported for all XML indexes, for a spatial index or a primary XML index, ALTER INDEX currently uses only a single processor.

Max_degree_of_parallelism sind möglich: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 verfügbar in jeder Edition von MicrosoftMicrosoft SQL ServerSQL Server.Parallel index operations are not available in every edition of MicrosoftMicrosoft SQL ServerSQL Server. Eine Liste der Funktionen, die von den Editionen unterstützt werden SQL ServerSQL Server, finden Sie unter Editionen und unterstützte Funktionen für SQL Server 2016SQL 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 2016SQL Server 2016.

COMPRESSION_DELAY = { 0 |Dauer [Minuten] }COMPRESSION_DELAY = { 0 |duration [Minutes] }
Diese Funktion ist verfügbar ab SQL Server 2016SQL Server 2016This feature is available Starting with SQL Server 2016SQL Server 2016

Verzögerung gibt die minimale Anzahl von Minuten an, die eine Delta-Zeilengruppen in den GESCHLOSSENEN Zustand verbleiben muss für eine datenträgerbasierte Tabelle in der deltazeilengruppe, vor SQL Server in der komprimierten Zeilengruppe komprimiert werden können.For a disk-based table, delay specifies the minimum number of minutes a delta rowgroup in the CLOSED state must remain in the delta rowgroup before SQL Server can compress it into the compressed rowgroup. Da es sich bei datenträgerbasierten Tabellen nicht nachverfolgen einfügen und aktualisieren Zeiten für einzelne Zeilen, SQL Server gilt die Verzögerung in Delta-Zeilengruppen in den GESCHLOSSENEN Zustand übergeht.Since disk-based tables don't track insert and update times on individual rows, SQL Server applies the delay to delta rowgroups in the CLOSED state.
Der Standardwert beträgt 0 Minuten.The default is 0 minutes.

Der Standardwert beträgt 0 Minuten.The default is 0 minutes.

Für Empfehlungen dazu, wann COMPRESSION_DELAY verwenden, finden Sie unter columnstore-Indizes für die operative Analyse in Echtzeit.For recommendations on when to use COMPRESSION_DELAY, see Columnstore Indexes for Real-Time Operational Analytics.

DATA_COMPRESSIONDATA_COMPRESSION
Gibt die Datenkomprimierungsoption für den angegebenen Index, die Partitionsnummer oder den Bereich von Partitionen an.Specifies the data compression option for the specified index, partition number, or range of partitions. Folgende Optionen stehen zur Verfügung:The options are as follows:

KeineNONE
Der Index oder die angegebenen Partitionen werden nicht komprimiert.Index or specified partitions are not compressed. Gilt nicht für columnstore-Indizes.This does not apply to columnstore indexes.

ROWROW
Der Index oder die angegebenen Partitionen werden mit Zeilenkomprimierung komprimiert.Index or specified partitions are compressed by using row compression. Gilt nicht für columnstore-Indizes.This does not apply to columnstore indexes.

PAGEPAGE
Der Index oder die angegebenen Partitionen werden mit Seitenkomprimierung komprimiert.Index or specified partitions are compressed by using page compression. Gilt nicht für columnstore-Indizes.This does not apply to columnstore indexes.

COLUMNSTORECOLUMNSTORE

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2014SQL Server 2014) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2014SQL Server 2014) and SQL-DatenbankSQL Database.

Gilt nur für columnstore-Indizes, einschließlich nicht gruppierter und gruppierter columnstore-Indizes.Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. COLUMNSTORE gibt an, dass der Index oder angegebene Partitionen, die mit der COLUMNSTORE_ARCHIVE-Option komprimiert wurden, dekomprimiert werden sollen.COLUMNSTORE specifies to decompress the index or specified partitions that are compressed with the COLUMNSTORE_ARCHIVE option. Nachdem die Daten wiederhergestellt wurden, sind sie weiterhin mit der columnstore-Komprimierung komprimiert, die für alle columnstore-Indizes verwendet wird.When the data is restored, it will continue to be compressed with the columnstore compression that is used for all columnstore indexes.

COLUMNSTORE_ARCHIVECOLUMNSTORE_ARCHIVE

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2014SQL Server 2014) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2014SQL Server 2014) and SQL-DatenbankSQL Database.

Gilt nur für columnstore-Indizes, einschließlich nicht gruppierter und gruppierter columnstore-Indizes.Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. Durch COLUMNSTORE_ARCHIVE wird die angegebene Partition weiter in eine geringere Größe komprimiert.COLUMNSTORE_ARCHIVE will further compress the specified partition to a smaller size. Dies empfiehlt sich bei der Archivierung und in Situationen, in denen es auf eine geringere Speichergröße und nicht auf den zusätzlichen Zeitaufwand für das Speichern und Abrufen ankommt.This can be used for archival, or for other situations that require a smaller storage size and can afford more time for storage and retrieval.

Weitere Informationen zur Komprimierung finden Sie unter Datenkomprimierung.For more information about compression, see Data Compression.

AUF PARTITIONEN ( { <Partition_number_expression > | <Bereich >} [,... n] )ON PARTITIONS ( { <partition_number_expression> | <range> } [,...n] )

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2008SQL Server 2008) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL-DatenbankSQL Database.

Gibt die Partitionen an, für die die DATA_COMPRESSION-Einstellung gilt.Specifies the partitions to which the DATA_COMPRESSION setting applies. Wenn der Index nicht partitioniert ist, erzeugt das ON PARTITIONS-Argument einen Fehler.If the index is not partitioned, the ON PARTITIONS argument will generate an error. Wenn die ON PARTITIONS-Klausel nicht angegeben wird, gilt die DATA_COMPRESSION-Option für alle Partitionen eines partitionierten Indexes.If the ON PARTITIONS clause is not provided, the DATA_COMPRESSION option applies to all partitions of a partitioned index.

<Partition_number_expression > kann auf folgende Weise angegeben werden:<partition_number_expression> can be specified in the following ways:

  • Geben Sie die Nummer der Partition an, beispielsweise: ON PARTITIONS (2).Provide the number for a partition, for example: ON PARTITIONS (2).

  • Geben Sie die Partitionsnummern mehrerer einzelner Partitionen durch Trennzeichen getrennt an, beispielsweise: ON PARTITIONS (1, 5).Provide the partition numbers for several individual partitions separated by commas, for example: ON PARTITIONS (1, 5).

  • Geben Sie sowohl Bereiche als auch einzelne Partitionen an: ON PARTITIONS (2, 4, 6 TO 8).Provide both ranges and individual partitions: ON PARTITIONS (2, 4, 6 TO 8).

    <Range > können durch das Wort TO, z. B. getrennte Partitionsnummern angegeben werden: ON PARTITIONS (6 TO 8).<range> can be specified as partition numbers separated by the word TO, for example: ON PARTITIONS (6 TO 8).

    Wenn Sie für verschiedene Partitionen unterschiedliche Datenkomprimierungstypen festlegen möchten, geben Sie die Option DATA_COMPRESSION mehrmals an, beispielsweise:To set different types of data compression for different partitions, specify the DATA_COMPRESSION option more than once, for example:

REBUILD WITH   
(  
DATA_COMPRESSION = NONE ON PARTITIONS (1),   
DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8),   
DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5)  
);  

ONLINE = {ON | OFF } <wie für Single_partition_rebuild_index_option >ONLINE = { ON | OFF } <as applies to single_partition_rebuild_index_option>
Gibt an, ob ein Index oder eine Indexpartition einer zugrunde liegenden Tabelle online oder offline neu erstellt werden kann.Specifies whether an index or an index partition of an underlying table can be rebuilt online or offline. Wenn REBUILD online ausgeführt wird (ON) die Daten in dieser Tabelle sind für Abfragen und datenänderungen während des Indexvorgangs verfügbar.If REBUILD is performed online (ON) the data in this table is available for queries and data modification during the index operation. Die Standardeinstellung ist OFF.The default is OFF.

ONON
Lang andauernde Sperren werden nicht für die Dauer des Indexvorgangs aufrechterhalten.Long-term table locks are not held for the duration of the index operation. Während der Hauptphase des Indexvorgangs wird nur eine beabsichtigte freigegebene Sperre (IS) für die Quelltabelle aufrechterhalten.During the main phase of the index operation, only an Intent Share (IS) lock is held on the source table. Eine S-Sperre für die Tabelle ist der Anfang der indexneuerstellung und eine Sch-M-Sperre für die Tabelle am Ende der online-indexneuerstellung erforderlich.An S-lock on the table is required in the Starting of the index rebuild and a Sch-M lock on the table at the end of the online index rebuild. Obwohl beide Sperren kurze Metadatensperren sind, muss insbesondere die Sch-M-Sperre auf den Abschluss aller blockierenden Transaktionen warten.Although both locks are short metadata locks, especially the Sch-M lock must wait for all blocking transactions to be completed. Während der Wartezeit sperrt die Sch-M-Sperre alle anderen Transaktionen, die an dieser Sperre warten, wenn sie auf die gleiche Tabelle zugreifen.During the wait time the Sch-M lock blocks all other transactions that wait behind this lock when accessing the same table.

Hinweis

Neuerstellung von Onlineindizes kann festlegen, die Low_priority_lock_wait weiter unten in diesem Abschnitt beschriebenen Optionen.Online index rebuild can set the low_priority_lock_wait options described later in this section.

OFFOFF
Die Tabellensperren werden für die Dauer des Indexvorgangs angewendet.Table locks are applied for the duration of the index operation. Dadurch wird verhindert, dass Benutzer für die Dauer des Vorgangs auf die zugrunde liegende Tabelle zugreifen können.This prevents all user access to the underlying table for the duration of the operation.

WAIT_AT_LOW_PRIORITY mit verwendet ONLINE = ON nur.WAIT_AT_LOW_PRIORITY used with ONLINE=ON only.

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2014SQL Server 2014) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2014SQL Server 2014) and SQL-DatenbankSQL Database.

Bei der Onlineindexneuerstellung muss auf blockierende Vorgänge für diese Tabelle gewartet werden.An online index rebuild has to wait for blocking operations on this table. WAIT_AT_LOW_PRIORITY gibt an, dass der Vorgang zur onlineindexneuerstellung Sperren mit niedriger Priorität, sodass andere Vorgänge, während die onlineindexerstellung wartet gewartet wird.WAIT_AT_LOW_PRIORITY indicates that the online index rebuild operation will wait for low priority locks, allowing other operations to proceed while the online index build operation is waiting. Das Weglassen der WAIT AT LOW PRIORITY -Option ist gleichwertig mit WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE).Omitting the WAIT AT LOW PRIORITY option is equivalent to WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE). Weitere Informationen finden Sie unter WAIT_AT_LOW_PRIORITY.For more information, see WAIT_AT_LOW_PRIORITY.

MAX_DURATION = time [MINUTES]MAX_DURATION = time [MINUTES]

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2014SQL Server 2014) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2014SQL Server 2014) and SQL-DatenbankSQL Database.

Die Wartezeit (ein ganzzahliger Wert in Minuten), während der die Sperren der Onlineindexneuerstellung mit niedriger Priorität warten, wenn der DDL-Befehl ausgeführt wird.The wait time (an integer value specified in minutes) that the online index rebuild locks will wait with low priority when executing the DDL command. Wenn der Vorgang blockiert wird die MAX_DURATION Zeit, eines der ABORT_AFTER_WAIT -Aktionen ausgeführt.If the operation is blocked for the MAX_DURATION time, one of the ABORT_AFTER_WAIT actions will be executed. MAX_DURATION ist immer in Minuten, und das Wort Minuten kann ausgelassen werden.MAX_DURATION time is always in minutes, and the word MINUTES can be omitted.

ABORT_AFTER_WAIT = [NONE | SELF | BLOCKERS } ]ABORT_AFTER_WAIT = [NONE | SELF | BLOCKERS } ]

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2014SQL Server 2014) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2014SQL Server 2014) and SQL-DatenbankSQL Database.

KeineNONE
Es wird weiterhin mit normaler (regulärer) Priorität auf die Sperre gewartet.Continue waiting for the lock with normal (regular) priority.

SELFSELF
Beendet den DDL-Vorgang zur Onlineindexneuerstellung, der derzeit ausgeführt wird, ohne weitere Aktionen auszuführen.Exit the online index rebuild DDL operation currently being executed without taking any action.

BLOCKERSBLOCKERS
Bricht alle Benutzertransaktionen ab, die den DDL-Vorgang zur Onlineindexneuerstellung blockieren, sodass der Vorgang fortgesetzt werden kann.Kill all user transactions that block the online index rebuild DDL operation so that the operation can continue. Die BLOCKERN Option erfordert die Anmeldung ALTER ANY CONNECTION Berechtigung.The BLOCKERS option requires the login to have ALTER ANY CONNECTION permission.

RESUMERESUME

Gilt für: abSQL Server 2017SQL Server 2017Applies to: Starting with SQL Server 2017SQL Server 2017

Fortsetzen eines Indexvorgangs, das manuell oder aufgrund eines Fehlers angehalten wurde.Resume an index operation that is paused manually or due to a failure.

Mit MAX_DURATION verwendet kann wieder aufgenommen werden = ONMAX_DURATION used with RESUMABLE=ON

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2017SQL Server 2017) und SQL-DatenbankSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017SQL Server 2017) and SQL-DatenbankSQL Database

Die Zeit (ein ganzzahliger Wert, der in Minuten angegeben ist) die fortsetzbar Onlineindexvorgang wird ausgeführt, nachdem das wieder aufgenommen wird.The time (an integer value specified in minutes) the resumable online index operation is executed after being resumed. Nach Ablauf dieses Zeitraums ist fortsetzbare Vorgang angehalten, wenn er immer noch ausgeführt wird.Once the time expires, the resumable operation is paused if it is still running.

WAIT_AT_LOW_PRIORITY mit verwendet kann wieder aufgenommen werden = ON und ONLINE = ON.WAIT_AT_LOW_PRIORITY used with RESUMABLE=ON and ONLINE = ON.

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2017SQL Server 2017) und SQL-DatenbankSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017SQL Server 2017) and SQL-DatenbankSQL Database

Eine online-indexneuerstellung wird fortgesetzt, nachdem eine Pause auf blockierende Vorgänge für diese Tabelle gewartet hat.Resuming an online index rebuild after a pause has to wait for blocking operations on this table. WAIT_AT_LOW_PRIORITY gibt an, dass der Vorgang zur onlineindexneuerstellung Sperren mit niedriger Priorität, sodass andere Vorgänge, während die onlineindexerstellung wartet gewartet wird.WAIT_AT_LOW_PRIORITY indicates that the online index rebuild operation will wait for low priority locks, allowing other operations to proceed while the online index build operation is waiting. Das Weglassen der WAIT AT LOW PRIORITY -Option ist gleichwertig mit WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE).Omitting the WAIT AT LOW PRIORITY option is equivalent to WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE). Weitere Informationen finden Sie unter WAIT_AT_LOW_PRIORITY.For more information, see WAIT_AT_LOW_PRIORITY.

ANHALTENPAUSE

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2017SQL Server 2017) und SQL-DatenbankSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017SQL Server 2017) and SQL-DatenbankSQL Database

Anhalten eines fortsetzbar Vorgangs zur onlineindexneuerstellung an.Pause a resumable online index rebuild operation.

ABBRECHENABORT

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2017SQL Server 2017) und SQL-DatenbankSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017SQL Server 2017) and SQL-DatenbankSQL Database

Abbrechen eines ausgeführten oder angehaltenen Indexvorgangs, der als fortsetzbar deklariert wurde.Abort a running or paused index operation that was declared as resumable. Müssen Sie explizit ausführen, eine ABORT -Neuerstellungsvorgang von Befehl zum Beenden eines Indexes kann wieder aufgenommen.You have to explicitly execute an ABORT command to terminate a resumable index rebuild operation. Fehler oder einen fortsetzbaren Indexvorgang Anhalten wird nicht seine Ausführung beendet; Stattdessen bewirkt, dass sie den Vorgang unbestimmtes anhalten.Failure or pausing a resumable index operation does not terminate its execution; rather, it leaves the operation in an indefinite pause state.

HinweiseRemarks

ALTER INDEX kann nicht verwendet werden, um einen Index neu zu partitionieren oder ihn in eine andere Dateigruppe zu verschieben.ALTER INDEX cannot be used to repartition an index or move it to a different filegroup. Diese Anweisung kann nicht verwendet werden, um die Indexdefinition, wie z. B. das Hinzufügen oder Löschen von Spalten oder das Ändern der Spaltenreihenfolge, zu ändern.This statement cannot be used to modify the index definition, such as adding or deleting columns or changing the column order. Verwenden Sie CREATE INDEX mit der DROP_EXISTING-Klausel zum Ausführen dieser Vorgänge.Use CREATE INDEX with the DROP_EXISTING clause to perform these operations.

Wenn eine Option nicht explizit angegeben ist, wird die aktuelle Einstellung angewendet.When an option is not explicitly specified, the current setting is applied. Wenn in der REBUILD-Klausel beispielsweise keine FILLFACTOR-Einstellung angegeben ist, wird der im Systemkatalog gespeicherte Füllfaktorwert während der Neuerstellung verwendet.For example, if a FILLFACTOR setting is not specified in the REBUILD clause, the fill factor value stored in the system catalog will be used during the rebuild process. Verwenden Sie zum Anzeigen der aktuellen indexoptionseinstellungen sys.indexes.To view the current index option settings, use sys.indexes.

Hinweis

Die Werte für ONLINE, MAXDOP und SORT_IN_TEMPDB werden nicht im Systemkatalog gespeichert.The values for ONLINE, MAXDOP, and SORT_IN_TEMPDB are not stored in the system catalog. Der Standardwert der Option wird verwendet, sofern die Option nicht in der Indexanweisung angegeben ist.Unless specified in the index statement, the default value for the option is used.

Auf Mehrprozessorcomputern werden für ALTER INDEX REBUILD wie bei allen anderen Abfragen automatisch mehr Prozessoren verwendet, um bei Indexänderungen Scan- und Sortierungsvorgänge auszuführen.On multiprocessor computers, just like other queries do, ALTER INDEX REBUILD automatically uses more processors to perform the scan and sort operations that are associated with modifying the index. Wenn Sie ALTER INDEX REORGANIZE, mit oder ohne LOB_COMPACTION Ausführen der Max. Grad an Parallelität Wert ist einem einzelnen Threadvorgang.When you run ALTER INDEX REORGANIZE, with or without LOB_COMPACTION, the max degree of parallelism value is a single threaded operation. Weitere Informationen finden Sie unter Konfigurieren von Parallelindexvorgängen.For more information, see Configure Parallel Index Operations.

Ein Index kann nicht neu organisiert oder neu erstellt werden, wenn die Dateigruppe, in der er enthalten ist, eine Offline- oder schreibgeschützte Dateigruppe ist.An index cannot be reorganized or rebuilt if the filegroup in which it is located is offline or set to read-only. Wenn das Schlüsselwort ALL angegeben ist und mindestens ein Index in einer Offline- oder schreibgeschützten Dateigruppe enthalten ist, erzeugt die Anweisung einen Fehler.When the keyword ALL is specified and one or more indexes are in an offline or read-only filegroup, the statement fails.

Das Neuerstellen von IndizesRebuilding Indexes

Beim Neuerstellen eines Indexes wird der Index gelöscht und neu erstellt.Rebuilding an index drops and re-creates the index. Bei diesem Vorgang wird die Fragmentierung entfernt, Speicherplatz wird freigegeben, indem die Seiten auf der Grundlage der angegebenen oder vorhandenen Füllfaktoreinstellung komprimiert werden, und die Indexzeilen werden in aufeinanderfolgenden Seiten neu geordnet.This removes fragmentation, reclaims disk space by compacting the pages based on the specified or existing fill factor setting, and reorders the index rows in contiguous pages. Wenn ALL angegeben ist, werden alle Indizes der Tabelle in einer einzelnen Transaktion gelöscht und neu erstellt.When ALL is specified, all indexes on the table are dropped and rebuilt in a single transaction. FOREIGN KEY-Einschränkungen müssen nicht im Voraus gelöscht werden.FOREIGN KEY constraints do not have to be dropped in advance. Wenn Indizes mit mindestens 128 Blöcken neu erstellt werden, verzögert das DatenbankmodulDatabase Engine die tatsächlichen aufgehobenen Seitenzuordnungen sowie deren zugeordnete Sperren, bis für die Transaktion ein Commit ausgeführt wird.When indexes with 128 extents or more are rebuilt, the DatenbankmodulDatabase Engine defers the actual page deallocations, and their associated locks, until after the transaction commits.

Durch das erneute Erstellen oder Organisieren kleiner Indizes lässt sich die Fragmentierung häufig nicht verringern.Rebuilding or reorganizing small indexes often does not reduce fragmentation. Die Seiten kleiner Indizes werden manchmal in gemischten Blöcken gespeichert.The pages of small indexes are sometimes stored on mixed extents. Da gemischte Blöcke von bis zu acht Objekten gemeinsam genutzt werden, lässt sich die Fragmentierung in einem kleinen Index durch die erneute Erstellung oder Organisation des Indexes möglicherweise nicht verringern.Mixed extents are shared by up to eight objects, so the fragmentation in a small index might not be reduced after reorganizing or rebuilding it.

Ab SQL Server 2012SQL Server 2012werden Statistiken nicht durch das Scannen aller Zeilen in der Tabelle erstellt, wenn ein partitionierter Index erstellt oder neu erstellt wird.Starting with SQL Server 2012SQL Server 2012, statistics are not created by scanning all the rows in the table when a partitioned index is created or rebuilt. Der Abfrageoptimierer generiert stattdessen Statistiken mithilfe des Standardalgorithmus zur Stichprobenentnahme.Instead, the query optimizer uses the default sampling algorithm to generate statistics. Um Statistiken zu partitionierten Indizes durch das Scannen aller Zeilen in der Tabelle abzurufen, verwenden Sie CREATE STATISTICS oder UPDATE STATISTICS mit der FULLSCAN-Klausel.To obtain statistics on partitioned indexes by scanning all the rows in the table, use CREATE STATISTICS or UPDATE STATISTICS with the FULLSCAN clause.

In früheren Versionen von SQL ServerSQL Server konnte in einigen Fällen ein nicht gruppierter Index neu erstellt werden, um durch Hardwarefehler verursachte Inkonsistenzen zu korrigieren.In earlier versions of SQL ServerSQL Server, you could sometimes rebuild a nonclustered index to correct inconsistencies caused by hardware failures. Ab SQL Server 2008SQL Server 2008 sind Sie u. U. weiterhin in der Lage, derartige Inkonsistenzen zwischen dem Index und dem gruppierten Index zu beheben, indem Sie einen nicht gruppierten Index offline erstellen.In SQL Server 2008SQL Server 2008 and later, you may still be able to repair such inconsistencies between the index and the clustered index by rebuilding a nonclustered index offline. Sie können die Inkonsistenzen eines nicht gruppierten Indexes jedoch nicht beheben, indem Sie den Index online neu erstellen, da der Onlineneuerstellungsmechanismus den vorhandenen nicht gruppierten Index als Grundlage für die Neuerstellung verwendet und somit die Inkonsistenzen bestehen bleiben.However, you cannot repair nonclustered index inconsistencies by rebuilding the index online, because the online rebuild mechanism will use the existing nonclustered index as the basis for the rebuild and thus persist the inconsistency. Wird der Index offline neu erstellt, wird in manchen Fällen ein Scan des gruppierten Indexes (oder Heaps) erzwungen. um dadurch Inkonsistenzen zu entfernen.Rebuilding the index offline can sometimes force a scan of the clustered index (or heap) and so remove the inconsistency. Um eine Neuerstellung des gruppierten Indexes zu gewährleisten, löschen Sie den nicht gruppierten Index und erstellen Sie ihn neu.To assure a rebuild from the clustered index, drop and recreate the non-clustered index. Wie in früheren Versionen wird zum Entfernen von Inkonsistenzen empfohlenen, die betroffenen Daten aus einer Sicherung wiederherzustellen. Die Inkonsistenzen des Indexes können möglicherweise auch behoben werden, indem der nicht gruppierte Index offline neu erstellt wird.As with earlier versions, we recommend recovering from inconsistencies by restoring the affected data from a backup; however, you may be able to repair the index inconsistencies by rebuilding the nonclustered index offline. Weitere Informationen finden Sie unter DBCC CHECKDB (Transact-SQL).For more information, see DBCC CHECKDB (Transact-SQL).

Die Neuerstellung eines gruppierten columnstore-Indexes verläuft in SQL ServerSQL Server wie folgt:To rebuild a clustered columnstore index, SQL ServerSQL Server:

  1. Abrufen einer exklusiven Sperre für die Tabelle oder Partition, während die Neuerstellung ausgeführt wird.Acquires an exclusive lock on the table or partition while the rebuild occurs. Die Daten sind während der Neuerstellung "offline" und nicht verfügbar.The data is “offline” and unavailable during the rebuild.

  2. Defragmentieren des Columnstore, indem physisch Zeilen gelöscht werden, die logisch aus der Tabelle gelöscht wurden. Die gelöschten Bytes werden auf dem physischen Medium freigegeben.Defragments the columnstore by physically deleting rows that have been logically deleted from the table; the deleted bytes are reclaimed on the physical media.

  3. Liest alle Daten aus dem ursprünglichen Columnstore-Index, einschließlich des Deltastore.Reads all data from the original columnstore index, including the deltastore. Die Daten werden in neuen Zeilengruppen zusammengefasst, und die Zeilengruppen werden in den Columnstore-Index komprimiert.It combines the data into new rowgroups, and compresses the rowgroups into the columnstore.

  4. Auf dem physischen Medium muss ausreichend freier Speicherplatz zur Verfügung stehen, um während der Neuerstellung zwei Kopien des Columnstore-Indexes speichern zu können.Requires space on the physical media to store two copies of the columnstore index while the rebuild is taking place. Nach Abschluss der Neuerstellung wird der ursprüngliche gruppierte Columnstore-Index von SQL ServerSQL Server gelöscht.When the rebuild is finished, SQL ServerSQL Server deletes the original clustered columnstore index.

Neuorganisieren von IndizesReorganizing Indexes

Das Neuorganisieren eines Indexes beansprucht minimale Systemressourcen.Reorganizing an index uses minimal system resources. Dabei wird die Blattebene von gruppierten und nicht gruppierten Indizes in Tabellen und Sichten defragmentiert, indem die Blattebenenseiten physisch neu geordnet werden, damit sie mit der logischen Reihenfolge der Blattknoten von links nach rechts übereinstimmen.It defragments the leaf level of clustered and nonclustered indexes on tables and views by physically reordering the leaf-level pages to match the logical, left to right, order of the leaf nodes. Durch das Neuorganisieren werden die Indexseiten auch komprimiert.Reorganizing also compacts the index pages. Die Komprimierung basiert auf dem vorhandenen Füllfaktorwert.Compaction is based on the existing fill factor value. Verwenden Sie zum Anzeigen der füllfaktoreinstellung sys.indexes.To view the fill factor setting, use sys.indexes.

Wenn ALL angegeben ist, werden relationale Indizes, sowohl gruppierte als auch nicht gruppierte, und XML-Indizes der Tabelle neu organisiert.When ALL is specified, relational indexes, both clustered and nonclustered, and XML indexes on the table are reorganized. Bei Angabe von ALL gelten einige Einschränkungen; diese finden Sie in der Definition zu ALL im Abschnitt "Argumente".Some restrictions apply when specifying ALL, see the definition for ALL in the Arguments section.

Weitere Informationen finden Sie unter Neuorganisieren und Neuerstellen von Indizes.For more information, see Reorganize and Rebuild Indexes.

Deaktivieren von IndizesDisabling Indexes

Durch das Deaktivieren eines Indexes wird der Benutzerzugriff auf den Index sowie auf die zugrunde liegenden Tabellendaten gruppierter Indizes verhindert.Disabling an index prevents user access to the index, and for clustered indexes, to the underlying table data. Die Indexdefinition bleibt im Systemkatalog erhalten.The index definition remains in the system catalog. Beim Deaktivieren eines nicht gruppierten oder gruppierten Indexes in einer Sicht werden die Indexdaten physisch gelöscht.Disabling a nonclustered index or clustered index on a view physically deletes the index data. Durch das Deaktivieren eines gruppierten Indexes wird der Benutzerzugriff auf die Daten verhindert; die Daten bleiben jedoch in der B-Struktur unverwaltet, bis der Index gelöscht oder neu erstellt wird.Disabling a clustered index prevents access to the data, but the data remains unmaintained in the B-tree until the index is dropped or rebuilt. Um den Status eines aktivierten oder deaktivierten Indexes anzuzeigen, Fragen den Is_disabled Spalte in der sys.indexes -Katalogsicht angezeigt.To view the status of an enabled or disabled index, query the is_disabled column in the sys.indexes catalog view.

Befindet sich eine Tabelle in einer Transaktionsreplikationsveröffentlichung, können die Indizes, die mit Primärschlüsselspalten verknüpft sind, nicht deaktiviert werden,If a table is in a transactional replication publication, you cannot disable any indexes that are associated with primary key columns. weil diese Indizes von der Replikation benötigt werden.These indexes are required by replication. Wenn Sie einen Index deaktivieren möchten, müssen Sie zuerst die Tabelle aus der Veröffentlichung löschen.To disable an index, you must first drop the table from the publication. Weitere Informationen finden Sie unter Veröffentlichen von Daten und Datenbankobjekten.For more information, see Publish Data and Database Objects.

Verwenden Sie die ALTER INDEX REBUILD-Anweisung oder die CREATE INDEX WITH DROP_EXISTING-Anweisung, um den Index zu aktivieren.Use the ALTER INDEX REBUILD statement or the CREATE INDEX WITH DROP_EXISTING statement to enable the index. Das Neuerstellen eines deaktivierten gruppierten Indexes kann nicht durchgeführt werden, wenn die ONLINE-Option auf ON festgelegt ist.Rebuilding a disabled clustered index cannot be performed with the ONLINE option set to ON. Weitere Informationen finden Sie unter Deaktivieren von Indizes und Einschränkungen.For more information, see Disable Indexes and Constraints.

Festlegen von OptionenSetting Options

Sie können die Optionen ALLOW_ROW_LOCKS, ALLOW_PAGE_LOCKS, IGNORE_DUP_KEY und STATISTICS_NORECOMPUTE für einen angegebenen Index festlegen, ohne den Index neu zu erstellen oder zu organisieren.You can set the options ALLOW_ROW_LOCKS, ALLOW_PAGE_LOCKS, IGNORE_DUP_KEY and STATISTICS_NORECOMPUTE for a specified index without rebuilding or reorganizing that index. Die geänderten Werte werden sofort auf den Index angewendet.The modified values are immediately applied to the index. Verwenden Sie zum Anzeigen dieser Einstellungen sys.indexes.To view these settings, use sys.indexes. Weitere Informationen finden Sie unter Festlegen von Indexoptionen.For more information, see Set Index Options.

Zeilen- und Seitensperren (Optionen)Row and Page Locks Options

Wenn ALLOW_ROW_LOCKS und ALLOW_PAGE_LOCK auf ON festgelegt sind, sind Sperren auf Zeilen-, Seiten- und Tabellenebene beim Zugriff auf den Index zulässig.When ALLOW_ROW_LOCKS = ON and ALLOW_PAGE_LOCK = ON, row-level, page-level, and table-level locks are allowed when you access the index. Das DatenbankmodulDatabase Engine wählt die geeignete Sperre aus und kann die Sperre von einer Zeilen- oder Seitensperre auf eine Tabellensperre ausweiten.The DatenbankmodulDatabase Engine chooses the appropriate lock and can escalate the lock from a row or page lock to a table lock.

Wenn ALLOW_ROW_LOCKS auf OFF und ALLOW_PAGE_LOCK auf OFF festgelegt sind, sind beim Zugriff auf den Index nur Sperren auf Tabellenebene zulässig.When ALLOW_ROW_LOCKS = OFF and ALLOW_PAGE_LOCK = OFF, only a table-level lock is allowed when you access the index.

Wenn beim Festlegen der Optionen für Zeilen- oder Seitensperren ALL angegeben ist, werden die Einstellungen auf alle Indizes angewendet.If ALL is specified when the row or page lock options are set, the settings are applied to all indexes. Wenn es sich bei der zugrunde liegenden Tabelle um einen Heap handelt, werden die Einstellungen folgendermaßen angewendet:When the underlying table is a heap, the settings are applied in the following ways:

ALLOW_ROW_LOCKS = ON oder OFFALLOW_ROW_LOCKS = ON or OFF Für den Heap und alle zugeordneten nicht gruppierten Indizes.To the heap and any associated nonclustered indexes.
ALLOW_PAGE_LOCKS = ONALLOW_PAGE_LOCKS = ON Für den Heap und alle zugeordneten nicht gruppierten Indizes.To the heap and any associated nonclustered indexes.
ALLOW_PAGE_LOCKS = OFFALLOW_PAGE_LOCKS = OFF Vollständig für die nicht gruppierten Indizes.Fully to the nonclustered indexes. Dies bedeutet, dass für die nicht gruppierten Indizes keine Seitensperren zulässig sind.This means that all page locks are not allowed on the nonclustered indexes. Beim Heap sind nur gemeinsame Sperren (S, Shared), Updatesperren (U, Update) und exklusive Sperren (X, Exclusive) für die Seite unzulässig.On the heap, only the shared (S), update (U) and exclusive (X) locks for the page are not allowed. Das DatenbankmodulDatabase Engine kann weiterhin eine beabsichtigte Seitensperre (IS, IU oder IX) für interne Zwecke abrufen.The DatenbankmodulDatabase Engine can still acquire an intent page lock (IS, IU or IX) for internal purposes.

OnlineindexvorgängeOnline Index Operations

Wenn Sie einen Index neu erstellen, und die ONLINE-Option ist auf ON festgelegt, sind die zugrunde liegenden Objekte, die Tabellen und zugeordneten Indizes für Abfragen und Datenänderungen verfügbar.When rebuilding an index and the ONLINE option is set to ON, the underlying objects, the tables and associated indexes, are available for queries and data modification. Sie können auch einen Teil eines Indexes online neu erstellen, der sich in einer einzelnen Partition befindet.You can also rebuild online a portion of an index residing on a single partition. Exklusive Tabellensperren werden während des Änderungsprozesses nur für einen kurzen Zeitraum aufrechterhalten.Exclusive table locks are held only for a very short amount of time during the alteration process.

Das Neuorganisieren eines Indexes wird stets online durchgeführt.Reorganizing an index is always performed online. Bei dem Prozess werden Sperren nicht dauerhaft aufrechterhalten; daher werden Abfragen oder Updates, die ausgeführt werden, nicht blockiert.The process does not hold locks long term and, therefore, does not block queries or updates that are running.

Gleichzeitige Onlineindexvorgänge können in derselben Tabelle oder Tabellenpartition nur bei den folgenden Aktionen ausgeführt werden:You can perform concurrent online index operations on the same table or table partition only when doing the following:

  • Erstellen mehrerer nicht gruppierter Indizes.Creating multiple nonclustered indexes.
  • Neuorganisieren unterschiedlicher Indizes in derselben Tabelle.Reorganizing different indexes on the same table.
  • Neuorganisieren unterschiedlicher Indizes während der Neuerstellung von nicht überlappenden Indizes derselben Tabelle.Reorganizing different indexes while rebuilding nonoverlapping indexes on the same table.

    Alle anderen gleichzeitig durchgeführten Onlineindexvorgänge erzeugen einen Fehler.All other online index operations performed at the same time fail. Sie können beispielsweise nicht zwei oder mehr Indizes zur gleichen Zeit für dieselbe Tabelle neu erstellen bzw. beim Neuerstellen eines vorhandenen Indexes keinen neuen Index für dieselbe Tabelle erstellen.For example, you cannot rebuild two or more indexes on the same table concurrently, or create a new index while rebuilding an existing index on the same table.

Fortsetzbare IndexvorgängeResumable index operations

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2017SQL Server 2017) und SQL-DatenbankSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017SQL Server 2017) and SQL-DatenbankSQL Database

ONLINE INDEX REBUILD angegeben ist, als fortsetzbar mithilfe der kann wieder aufgenommen werden = Option.ONLINE INDEX REBUILD is specified as resumable using the RESUMABLE=ON option.

  • Die FORTSETZBARE Option wird nicht in den Metadaten für einen bestimmten Index beibehalten und gelten nur für die Dauer der aktuellen DDL-Anweisung.The RESUMABLE option is not persisted in the metadata for a given index and applies only to the duration of a current DDL statement. Aus diesem Grund die ANWENDUNGSUNABHÄNGIG = ON-Klausel muss explizit angegeben werden, um Resumability zu aktivieren.Therefore, the RESUMABLE=ON clause must be specified explicitly to enable resumability.
  • Beachten Sie zwei verschiedene MAX_DURATION-Optionen an.Please note two different MAX_DURATION options. Eine bezieht sich auf Low_priority_lock_wait und die andere bezieht sich auf kann wieder aufgenommen werden = Option.One is related to low_priority_lock_wait and the other is related to RESUMABLE=ON option.
    • MAX_DURATION-Option wird für kann wieder aufgenommen werden unterstützt = Option oder der Low_priority_lock_wait Argument-Option.MAX_DURATION option is supported for RESUMABLE=ON option or the low_priority_lock_wait argument option.
    • MAX_DURATION für FORTSETZBAR Option gibt das Zeitintervall für einen Index neu erstellen.MAX_DURATION for RESUMABLE option specifies the time interval for an index being rebuild. Sobald dieser verwendet wird, wenn der indexneuerstellung entweder angehalten wurde, oder es wird deren Ausführung beendet.Once this time is used the index rebuild is either paused or it completes its execution. Benutzer entscheidet sich, wenn eine Wiederherstellung für einen angehaltenen Index fortgesetzt werden kann.User decides when a rebuild for a paused index can be resumed. Die Zeit in Minuten für MAX_DURATION muss größere als 0 Minuten und kleiner oder gleich einer Woche (7 * 24 * 60 = 10080 Minuten) sein.The time in minutes for MAX_DURATION must be greater than 0 minutes and less or equal one week (7 * 24 * 60 = 10080 minutes). Mit einer langen Pause für einen Indexvorgang möglicherweise die DML-Leistung beeinträchtigen auf eine bestimmte Tabelle als auch die Datenträgerkapazität Datenbank, da beide Indizes ursprünglichen Zeichensatz und die neu erstellte eine erfordern, Speicherplatz und müssen aktualisiert werden, während DML-Vorgänge.Having a long pause for an index operation may impact the DML performance on a specific table as well as the database disk capacity since both indexes the original one and the newly created one require disk space and need to be updated during DML operations. Wenn MAX_DURATION-Option nicht angegeben ist, wird der Indexvorgang fortgesetzt, bis dessen Abschluss oder bis ein Fehler auftritt.If MAX_DURATION option is omitted, the index operation will continue until its completion or until a failure occurs.
  • Die <Low_priority_lock_wait >-Argument-Option können Sie entscheiden, wie der Index-Vorgang fortgesetzt werden kann, wenn auf die SCH-M-Sperre blockiert.The <low_priority_lock_wait> argument option allows you to decide how the index operation can proceed when blocked on the SCH-M lock.

  • Die ursprüngliche ALTER INDEX REBUILD-Anweisung mit den gleichen Parametern erneut ausführen, wird eine angehaltene indexneuerstellungsvorgangs fortgesetzt.Re-executing the original ALTER INDEX REBUILD statement with the same parameters resumes a paused index rebuild operation. Sie können auch einen angehaltenen indexneuerstellungsvorgangs fortsetzen, durch Ausführen der Anweisung ALTER INDEX fortsetzen.You can also resume a paused index rebuild operation by executing the ALTER INDEX RESUME statement.

  • Die SORT_IN_TEMPDB = ON Option wird für fortsetzbar Index nicht unterstützt.The SORT_IN_TEMPDB=ON option is not supported for resumable index
  • Der DDL-Befehl mit kann wieder aufgenommen werden = ON kann nicht innerhalb einer expliziten Transaktion ausgeführt werden (nicht Teil der begin Tran...The DDL command with RESUMABLE=ON cannot be executed inside an explicit transaction (cannot be part of begin tran … Commit-Block).commit block).
  • Nur Indexvorgänge, die angehalten werden sind fortsetzbar.Only index operations that are paused are resumable.
  • Wenn ein Indexerstellungsvorgang fortsetzen, die angehalten wurde, können Sie die MAXDOP-Wert in einen neuen Wert ändern.When resuming an index operation that is paused, you can change the MAXDOP value to a new value. Wenn MAXDOP nicht angegeben wird, wenn ein Indexerstellungsvorgang fortsetzen, die angehalten wurde, wird der letzte MAXDOP-Wert übernommen.If MAXDOP is not specified when resuming an index operation that is paused, the last MAXDOP value is taken. Wenn die MAXDOP-Option für die Neuerstellung des Index überhaupt nicht angegeben ist, wird der Standardwert übernommen.IF the MAXDOP option is not specified at all for index rebuild operation, the default value is taken.
  • Um den Vorgang sofort zu unterbrechen, können Sie den laufenden Befehl (STRG-C) beenden, oder können Sie den Befehl ALTER INDEX anhalten oder die KILL ausführen Session_id Befehl.To pause immediately the index operation, you can stop the ongoing command (Ctrl-C) or you can execute the ALTER INDEX PAUSE command or the KILL session_id command. Sobald der Befehl angehalten wird können sie mithilfe der Option RESUME fortgesetzt werden.Once the command is paused it can be resumed using RESUME option.
  • Die ABORT-Befehl beendet die Sitzung, die der ursprünglichen indexneuerstellung gehostet und bricht den Vorgang abThe ABORT command kills the session that hosted the original index rebuild and aborts the index operation
  • Keine zusätzlichen Ressourcen sind für fortsetzbar indexneuerstellung mit Ausnahme von erforderlichNo extra resources are required for resumable index rebuild except for
    • Zusätzlicher Speicherplatz erforderlich, um den Index erstellt wird, beibehalten, einschließlich der Zeit, wenn Index angehalten wirdAdditional space required to keep the index being built, including the time when index is being paused
    • Ein DDL-Zustand, der verhindert, dass alle DDL-ÄnderungA DDL state preventing any DDL modification
  • Bereinigung der inaktiven Datensätze werden während der Index Pause-Phase ausgeführt werden, aber es wird angehalten werden, während der indexerstellung ausgeführtThe ghost cleanup will be running during the index pause phase, but it will be paused during index run
    Die folgende Funktionalität ist für Neuerstellungsvorgänge fortsetzbar Index deaktiviertThe following functionality is disabled for resumable index rebuild operations
    • Beim Neuerstellen eines Indexes, die deaktiviert ist mit kann wieder aufgenommen werden nicht unterstützt wird = ONRebuilding an index that is disabled is not supported with RESUMABLE=ON
    • ALTER INDEX REBUILD BefehlALTER INDEX REBUILD ALL command
    • ALTER TABLE, die mithilfe von IndizesALTER TABLE using index rebuild
    • DDL-Befehl mit "RESUMEABLE = ON" kann nicht innerhalb einer expliziten Transaktion ausgeführt werden (nicht Teil der begin Tran...DDL command with “RESUMEABLE = ON” cannot be executed inside an explicit transaction (cannot be part of begin tran … Commit-Block)commit block)
    • Erstellen Sie einen Index, der eine berechnete Spaltenangabe oder TIMESTAMP-Spalten als Schlüsselspalten neu.Rebuild an index that has computed or TIMESTAMP column(s) as key columns.
  • Für den Fall, dass der Basistabelle LOB-Spalten fortsetzbar gruppiert ist indexneuerstellung eine Sch-M-Sperre in Starten dieses Vorgangs erforderlich.In case the base table contains LOB column(s) resumable clustered index rebuild requires a Sch-M lock in the Starting of this operation
    • Die SORT_IN_TEMPDB = ON Option wird für fortsetzbar Index nicht unterstützt.The SORT_IN_TEMPDB=ON option is not supported for resumable index

Hinweis

Der DDL-Befehl ausgeführt wird, bis er abgeschlossen ist, hält oder ein Fehler auftritt.The DDL command runs until it completes, pauses or fails. Für den Fall, dass der Befehl angehalten wird, wird ein Fehler ausgegeben, dass der Vorgang angehalten wurde und dass es sich bei die Erstellung eines Indexes nicht abgeschlossen wurde.In case the command pauses, an error will be issued indicating that the operation was paused and that the index creation did not complete. Weitere Informationen zum aktuellen Indexstatus abgerufen werden kann, aus sys.index_resumable_operations.More information about the current index status can be obtained from sys.index_resumable_operations. Wie vor im Falle eines Fehlers ein Fehler auch ausgegeben wird.As before in case of a failure an error will be issued as well.

Weitere Informationen finden Sie unter Perform Index Operations Online.For more information, see Perform Index Operations Online.

WAIT_AT_LOW_PRIORITY mit online-IndexvorgängeWAIT_AT_LOW_PRIORITY with online index operations

Um die DDL-Anweisung für eine Onlineindexneuerstellung auszuführen, müssen alle aktiven blockierenden Transaktionen, die für eine bestimmte Tabelle ausgeführt werden, abgeschlossen sein.In order to execute the DDL statement for an online index rebuild, all active blocking transactions running on a particular table must be completed. Wenn die Onlineindexneuerstellung ausgeführt wird, werden alle neuen Transaktionen, die zur Ausführung in dieser Tabelle bereit sind, blockiert.When the online index rebuild executes, it blocks all new transactions that are ready to start execution on this table. Obwohl die Sperre für die Onlineindexneuerstellung nur kurz dauert, kann das Warten auf den Abschluss aller noch offenen Transaktionen und das Blockieren aller neuen, zu startenden Transaktionen für eine bestimmte Tabelle den Durchsatz beeinträchtigen, eine Verlangsamung oder einen Ausfall der Arbeitsauslastung verursachen und den Zugriff auf die zugrunde liegende Tabelle deutlich einschränken.Although the duration of the lock for online index rebuild is very short, waiting for all open transactions on a given table to complete and blocking the new transactions to start, might significantly affect the throughput, causing a workload slow down or timeout, and significantly limit access to the underlying table. Die WAIT_AT_LOW_PRIORITY -Option können Datenbankadministratoren zum Verwalten der s- und Sch-M-Sperren muss für die onlineneuerstellung von Indizes und zum Auswählen eines 3-Optionen angegeben.The WAIT_AT_LOW_PRIORITY option allows DBA's to manage the S-lock and Sch-M locks required for online index rebuilds and allows them to select one of 3 options. In allen Fällen 3, wenn während der Wartezeit ( (MAX_DURATION = n [minutes]) ), es sind keine blockierenden Aktivitäten, die onlineindexneuerstellung ohne Wartezeit sofort ausgeführt wird und die DDL-Anweisung abgeschlossen ist.In all 3 cases, if during the wait time ( (MAX_DURATION = n [minutes]) ), there are no blocking activities, the online index rebuild is executed immediately without waiting and the DDL statement is completed.

Einschränkungen für räumliche IndizesSpatial Index Restrictions

Wenn Sie einen räumlichen Index neu erstellen, ist die zugrunde liegende Benutzertabelle während des Indexvorgangs nicht verfügbar, weil der räumliche Index eine Schemasperre eingerichtet hat.When you rebuild a spatial index, the underlying user table is unavailable for the duration of the index operation because the spatial index holds a schema lock.

Die PRIMARY KEY-Einschränkung der Benutzertabelle kann nicht geändert werden, solange ein räumlicher Index für eine Spalte der betreffenden Tabelle definiert ist.The PRIMARY KEY constraint in the user table cannot be modified while a spatial index is defined on a column of that table. Die PRIMARY KEY-Einschränkung kann erst geändert werden, nachdem alle räumlichen Indizes aus der Tabelle gelöscht wurden.To change the PRIMARY KEY constraint, first drop every spatial index of the table. Nach der Änderung der PRIMARY Key-Einschränkung können die einzelnen räumlichen Indizes neu erstellt werden.After modifying the PRIMARY KEy constraint, you can re-create each of the spatial indexes.

Räumliche Indizes können in einem Neuerstellungsvorgang einer einzelnen Partition nicht angegeben werden.In a single partition rebuild operation, you cannot specify any spatial indexes. Sie können räumliche Indizes jedoch bei einer vollständigen Neuerstellung der Partition angeben.However, you can specify spatial indexes in a complete partition rebuild.

Zum Ändern von Optionen, die einem bestimmten räumlichen Index eigen sind, beispielsweise BOUNDING_BOX oder GRID, können Sie entweder eine CREATE SPATIAL INDEX-Anweisung mit der Angabe DROP_EXISTING = ON verwenden, oder Sie löschen den räumlichen Index und erstellen einen neuen räumlichen Index.To change options that are specific to a spatial index, such as BOUNDING_BOX or GRID, you can either use a CREATE SPATIAL INDEX statement that specifies DROP_EXISTING = ON, or drop the spatial index and create a new one. Für ein Beispiel gehen Sie unter CREATE SPATIAL INDEX (Transact-SQL).For an example, see CREATE SPATIAL INDEX (Transact-SQL).

DatenkomprimierungData Compression

Weitere Informationen zur Datenkomprimierung finden Sie unter Datenkomprimierung.For a more information about data compression, see Data Compression.

Verwenden Sie zum Auswerten, wie eine Änderung Seiten- und zeilenkomprimierung eine Tabelle, einen Index oder eine Partition auswirkt, die Sp_estimate_data_compression_savings gespeicherte Prozedur.To evaluate how changing PAGE and ROW compression will affect a table, an index, or a partition, use the sp_estimate_data_compression_savings stored procedure.

Für partitionierte Indizes gelten die folgenden Einschränkungen:The following restrictions apply to partitioned indexes:

  • Bei Verwendung von ALTER INDEX ALL ..., Sie können nicht geändert, die komprimierungseinstellung einer einzelnen Partition, wenn die Tabelle nicht ausgerichtete Indizes.When you use ALTER INDEX ALL ..., you cannot change the compression setting of a single partition if the table has nonaligned indexes.
  • Die ALTER INDEX <Index >... REBUILD PARTITION ...-Syntax wird die angegebene Partition des Indexes neu erstellt.The ALTER INDEX <index> ... REBUILD PARTITION ... syntax rebuilds the specified partition of the index.
  • Die ALTER INDEX <Index >... REBUILD WITH ...-Syntax werden alle Partitionen des Indexes neu erstellt.The ALTER INDEX <index> ... REBUILD WITH ... syntax rebuilds all partitions of the index.

StatistikStatistics

Beim Ausführen ALTER INDEX ALL...When you execute ALTER INDEX ALL … für eine Tabelle werden nur die statistikmitarbeiter mit Indizes aktualisiert.on a table, only the statistics associates with indexes are updated. Automatische oder manuelle Statistiken, die statt eines Indexes in der Tabelle erstellt wurden, werden nicht aktualisiert.Automatic or manual statistics created on the table (instead of an index) are not updated.

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.

Die Anmerkungen zu dieser VersionVersion Notes

  • SQL-DatenbankSQL DatabaseOptionen für Dateigruppe und Filestream wird nicht verwendet werden. does not use filegroup and filestream options.
  • Columnstore-Indizes sind nicht verfügbar ist, vor SQL Server 2012SQL Server 2012.Columnstore indexes are not available prior to SQL Server 2012SQL Server 2012.
  • Fortsetzbare Indexvorgänge sind verfügbar ab SQL Server 2017SQL Server 2017 und SQL-DatenbankSQL DatabaseResumable index operations are available Starting with SQL Server 2017SQL Server 2017 and SQL-DatenbankSQL Database

Einfaches Syntaxbeispiel:Basic syntax example:

ALTER INDEX index1 ON table1 REBUILD;  

ALTER INDEX ALL ON table1 REBUILD;  

ALTER INDEX ALL ON dbo.table1 REBUILD;  

Beispiele: Columnstore-IndizesExamples: Columnstore Indexes

Diese Beispiele gelten für columnstore-Indizes.These examples apply to columnstore indexes.

A.A. REORGANIZE demoREORGANIZE demo

Dieses Beispiel veranschaulicht die Funktionsweise des ALTER INDEX REORGANIZE-Befehls.This example demonstrates how the ALTER INDEX REORGANIZE command works. Erstellt eine Tabelle, die mehrere Zeilengruppen und anschließend wird veranschaulicht, wie REORGANIZE die Zeilengruppen werden zusammengeführt.It creates a table that has multiple rowgroups, and then demonstrates how REORGANIZE merges the rowgroups.

-- Create a database   
CREATE DATABASE [ columnstore ];  
GO  

-- Create a rowstore staging table  
CREATE TABLE [ staging ] (  
     AccountKey              int NOT NULL,  
     AccountDescription      nvarchar (50),  
     AccountType             nvarchar(50),  
     AccountCodeAlternateKey     int  
     )  

-- Insert 10 million rows into the staging table.   
DECLARE @loop int  
DECLARE @AccountDescription varchar(50)  
DECLARE @AccountKey int  
DECLARE @AccountType varchar(50)  
DECLARE @AccountCode int  

SELECT @loop = 0  
BEGIN TRAN  
    WHILE (@loop < 300000)   
      BEGIN  
        SELECT @AccountKey = CAST (RAND()*10000000 as int);  
        SELECT @AccountDescription = 'accountdesc ' + CONVERT(varchar(20), @AccountKey);  
        SELECT @AccountType = 'AccountType ' + CONVERT(varchar(20), @AccountKey);  
        SELECT @AccountCode =  CAST (RAND()*10000000 as int);  

        INSERT INTO  staging VALUES (@AccountKey, @AccountDescription, @AccountType, @AccountCode);  

        SELECT @loop = @loop + 1;  
    END  
COMMIT  

-- Create a table for the clustered columnstore index  

CREATE TABLE cci_target (  
     AccountKey              int NOT NULL,  
     AccountDescription      nvarchar (50),  
     AccountType             nvarchar(50),  
     AccountCodeAlternateKey int  
     )  

-- Convert the table to a clustered columnstore index named inxcci_cci_target;  
```sql
CREATE CLUSTERED COLUMNSTORE INDEX idxcci_cci_target ON cci_target;  

Verwenden Sie die TABLOCK-Option zum Einfügen von Zeilen parallel.Use the TABLOCK option to insert rows in parallel. Beginnend mit SQL Server 2016SQL Server 2016, die INSERT INTO-Vorgangs kann parallel ausgeführt, wenn TABLOCK verwendet wird.Starting with SQL Server 2016SQL Server 2016, the INSERT INTO operation can run in parallel when TABLOCK is used.

INSERT INTO cci_target WITH (TABLOCK) 
SELECT TOP 300000 * FROM staging;  

Führen Sie diesen Befehl, um die offenen Delta-Zeilengruppen finden Sie unter.Run this command to see the OPEN delta rowgroups. Die Anzahl der Zeilengruppen hängt von den Grad der Parallelität.The number of rowgroups depends on the degree of parallelism.

SELECT *   
FROM sys.dm_db_column_store_row_group_physical_stats   
WHERE object_id  = object_id('cci_target');  

Führen Sie diesen Befehl, um alle geschlossen und OPEN-Zeilengruppen in den Columnstore zu zwingen.Run this command to force all CLOSED and OPEN rowgroups into the columnstore.

ALTER INDEX idxcci_cci_target ON cci_target REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON);  

Führen Sie diesen Befehl erneut aus, und sehen Sie, dass eine komprimierte Zeilengruppe kleinere Zeilengruppen zusammengeführt werden.Run this command again and you will see that smaller rowgroups are merged into one compressed rowgroup.

ALTER INDEX idxcci_cci_target ON cci_target REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON);  

B.B. Komprimieren von GESCHLOSSENEN Delta-Zeilengruppen in den columnstoreCompress CLOSED delta rowgroups into the columnstore

Dieses Beispiel verwendet die REORGANIZE-option zu komprimieren jede GESCHLOSSENEN Delta-Zeilengruppe im columnstore-Index als eine komprimierte Zeilengruppe.This example uses the REORGANIZE option to compresses each CLOSED delta rowgroup into the columnstore as a compressed rowgroup. Dies ist nicht erforderlich, aber es ist nützlich, wenn die tupelverschiebungsfunktion CLOSED-Zeilengruppen schnell genug ist, nicht komprimiert wird.This is not necessary, but is useful when the tuple-mover is not compressing CLOSED rowgroups fast enough.

-- Uses AdventureWorksDW  
-- REORGANIZE all partitions  
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE;  

-- REORGANIZE a specific partition  
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE PARTITION = 0;  

C.C. Komprimieren Sie alle GEÖFFNETEN und "geschlossen" Delta-Zeilengruppen in den columnstoreCompress all OPEN AND CLOSED delta rowgroups into the columnstore

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2016SQL Server 2016) und SQL-DatenbankSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2016SQL Server 2016) and SQL-DatenbankSQL Database

Der Befehl REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON) Compreses Öffnen der einzelnen und Delta-Zeilengruppe im columnstore-Index als eine komprimierte Zeilengruppe geschlossen.The command REORGANIZE WITH ( COMPRESS_ALL_ROW_GROUPS = ON ) compreses each OPEN and CLOSED delta rowgroup into the columnstore as a compressed rowgroup. Leert die Deltastores, und erzwingt die Übernahme aller Zeilen in den Columnstore komprimiert.This empties the deltastores and forces all rows to get compressed into the columnstore. Dies ist hilfreich, insbesondere nach vielen Insert-Vorgänge ausführen, da diese Vorgänge die Zeilen in einem oder mehreren Deltastores gespeichert werden.This is useful especially after performing many insert operations since these operations store the rows in one or more deltastores.

REORGANIZE kombiniert Zeilengruppen zum Füllen von Zeilengruppen, bis eine maximale Anzahl von Zeilen <= 1,024,576.REORGANIZE combines rowgroups to fill rowgroups up to a maximum number of rows <= 1,024,576. Aus diesem Grund alle öffnen "und" CLOSED-Zeilengruppen zu komprimieren wird nicht Sie mit vielen komprimierten Zeilengruppen annehmen, die nur wenige Zeilen enthalten.Therefore, when you compress all OPEN and CLOSED rowgroups you won't end up with lots of compressed rowgroups that only have a few rows in them. Zeilengruppen, reduzieren Sie die komprimierte Größe und Verbessern der Leistung von Abfragen möglichst als gefüllt werden soll.You want rowgroups to be as full as possible to reduce the compressed size and improve query performance.

-- Uses AdventureWorksDW2016  
-- Move all OPEN and CLOSED delta rowgroups into the columnstore.  
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON);  

-- For a specific partition, move all OPEN AND CLOSED delta rowgroups into the columnstore  
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE PARTITION = 0 WITH (COMPRESS_ALL_ROW_GROUPS = ON);  

D.D. Defragmentieren eines columnstore-Index onlineDefragment a columnstore index online

Gilt nicht für: SQL Server 2012SQL Server 2012 und SQL Server 2014SQL Server 2014.Does not apply to: SQL Server 2012SQL Server 2012 and SQL Server 2014SQL Server 2014.

Beginnend mit SQL Server 2016SQL Server 2016, REORGANIZE mehr als Delta-Zeilengruppen in den Columnstore komprimiert.Starting with SQL Server 2016SQL Server 2016, REORGANIZE does more than compress delta rowgroups into the columnstore. Er führt außerdem die Onlinedefragmentierung.It also performs online defragmentation. Zunächst wird die Größe des Columnstore von gelöschten Zeilen physisch zu entfernen, wenn mindestens 10 % der Zeilen in einer Zeilengruppe gelöscht wurden.First, it reduces the size of the columnstore by physically removing deleted rows when 10% or more of the rows in a rowgroup have been deleted. Klicken Sie dann, kombiniert er Zeilengruppen kombinieren, um größere Zeilengruppen bilden, für die sind bis zu maximal 1,024,576 Zeilen pro Zeilengruppen.Then, it combines rowgroups together to form larger rowgroups that have up to the maximum of 1,024,576 rows per rowgroups. Alle Zeilengruppen, die geändert werden, erhalten erneut komprimiert.All rowgroups that are changed get re-compressed.

Hinweis

Beginnend mit SQL Server 2016SQL Server 2016, das Neuerstellen eines columnstore-Indexes ist nicht mehr in den meisten Fällen erforderlich, da REORGANIZE physisch entfernt gelöschte Zeilen und Zeilengruppen zusammengeführt.Starting with SQL Server 2016SQL Server 2016, rebuilding a columnstore index is no longer necessary in most situations since REORGANIZE physically removes deleted rows and merges rowgroups. Die Option COMPRESS_ALL_ROW_GROUPS zwingt alle geöffnet oder geschlossen Delta-Zeilengruppen in den Columnstore die zuvor nur mit einer Wiederherstellung ausgeführt werden konnte.The COMPRESS_ALL_ROW_GROUPS option forces all OPEN or CLOSED delta rowgroups into the columnstore which previously could only be done with a rebuild. REORGANIZE online ist und erfolgt im Hintergrund, damit Abfragen fortgesetzt werden können, wie der Vorgang erfolgt.REORGANIZE is online and occurs in the background so queries can continue as the operation happens.

-- Uses AdventureWorks  
-- Defragment by physically removing rows that have been logically deleted from the table, and merging rowgroups.  
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE;  

E.E. Erstellen Sie einen gruppierten columnstore-Index offline neu.Rebuild a clustered columnstore index offline

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2012SQL Server 2012)Applies to: SQL ServerSQL Server (Starting with SQL Server 2012SQL Server 2012)

Tipp

Beginnend mit SQL Server 2016SQL Server 2016 und Azure SQL-DatenbankAzure SQL Database, es wird empfohlen, ALTER INDEX REORGANIZE anstelle von ALTER INDEX REBUILD.Starting with SQL Server 2016SQL Server 2016 and in Azure SQL-DatenbankAzure SQL Database, we recommend using ALTER INDEX REORGANIZE instead of ALTER INDEX REBUILD.

Hinweis

In SQL Server 2012SQL Server 2012 und SQL Server 2014SQL Server 2014, REORGANIZE wird nur verwendet, um die CLOSED-Zeilengruppen in den Columnstore komprimiert.In SQL Server 2012SQL Server 2012 and SQL Server 2014SQL Server 2014, REORGANIZE is only used to compress CLOSED rowgroups into the columnstore. Die einzige Möglichkeit, Defragmentierung Vorgänge auszuführen und alle Delta-Zeilengruppen in den Columnstore zu zwingen, wird den Index neu erstellt.The only way to perform defragmentation operations and to force all delta rowgroups into the columnstore is to rebuild the index.

Dieses Beispiel zeigt, wie Sie einen gruppierten columnstore-Index neu erstellen und alle Delta-Zeilengruppen in den Columnstore zu zwingen.This example shows how to rebuild a clustered columnstore index and force all delta rowgroups into the columnstore. Im ersten Schritt wird die FactInternetSales2-Tabelle mit einem gruppierten columnstore-Index vorbereitet, und es werden Daten aus den ersten vier Spalten eingefügt.This first step prepares a table FactInternetSales2 with a clustered columnstore index and inserts data from the first four columns.

-- Uses AdventureWorksDW  

CREATE TABLE dbo.FactInternetSales2 (  
    ProductKey [int] NOT NULL,   
    OrderDateKey [int] NOT NULL,   
    DueDateKey [int] NOT NULL,   
    ShipDateKey [int] NOT NULL);  

CREATE CLUSTERED COLUMNSTORE INDEX cci_FactInternetSales2  
ON dbo.FactInternetSales2;  

INSERT INTO dbo.FactInternetSales2  
SELECT ProductKey, OrderDateKey, DueDateKey, ShipDateKey  
FROM dbo.FactInternetSales;  

SELECT * FROM sys.column_store_row_groups;  

Die Ergebnisse zeigen, es ist eine OPEN-Zeilengruppe, d. h. SQL ServerSQL Server wartet darauf, dass weitere Zeilen hinzugefügt werden, bevor sie die Zeilengruppe geschlossen wird und die Daten in den Columnstore verschoben.The results show there is one OPEN rowgroup, which means SQL ServerSQL Server will wait for more rows to be added before it closes the rowgroup and moves the data to the columnstore. Mit der nächsten Anweisung erstellt den gruppierten columnstore-Index, der alle Zeilen im columnstore-Index erzwingt neu.This next statement rebuilds the clustered columnstore index, which forces all rows into the columnstore.

ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REBUILD;  
SELECT * FROM sys.column_store_row_groups;  

Die Ergebnisse der SELECT-Anweisung zeigen, dass die Zeilengruppe als COMPRESSED gekennzeichnet ist. Dies bedeutet, dass die Spaltensegmente der Zeilengruppe jetzt komprimiert und im Columnstore gespeichert sind.The results of the SELECT statement show the rowgroup is COMPRESSED, which means the column segments of the rowgroup are now compressed and stored in the columnstore.

F.F. Erstellen Sie eine Partition eines gruppierten columnstore-Index offline neuRebuild a partition of a clustered columnstore index offline

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2012SQL Server 2012)Applies to: SQL ServerSQL Server (Starting with SQL Server 2012SQL Server 2012)

Verwenden Sie ALTER INDEX REBUILD mit der Partitionsoption, um eine Partition eines großen gruppierten columnstore-Index neu zu erstellen.To rebuild a partition of a large clustered columnstore index, use ALTER INDEX REBUILD with the partition option. In diesem Beispiel wird die Partition 12 neu erstellt.This example rebuilds partition 12. Beginnend mit SQL Server 2016SQL Server 2016, es wird empfohlen, und Ersetzen Sie dabei mit REORGANIZE neu erstellen.Starting with SQL Server 2016SQL Server 2016, we recommend replacing REBUILD with REORGANIZE.

ALTER INDEX cci_fact3   
ON fact3  
REBUILD PARTITION = 12;  

G.G. Ändern Sie einen gruppierten rowstore-Index, um die archivierungskomprimierung zu verwendenChange a clustered columstore index to use archival compression

Gilt nicht für: SQL Server 2012SQL Server 2012Does not apply to: SQL Server 2012SQL Server 2012

Sie können auswählen, um die Größe eines gruppierten columnstore-Index noch weiter zu reduzieren, indem Sie mit der COLUMNSTORE_ARCHIVE-Datenkomprimierungsoption.You can choose to reduce the size of a clustered columnstore index even further by using the COLUMNSTORE_ARCHIVE data compression option. Dies ist praktisch für ältere Daten, die auf den kostengünstiger Speicher beibehalten werden sollen.This is practical for older data that you want to keep on cheaper storage. Es wird empfohlen, dass ein langsamer als bei der normalen columnstore-Komprimierung wird nur mit dies auf, die da häufig nicht abgefragte, Daten zu dekomprimieren.We recommend only using this on data that is not accessed often since decompress is slower than with the normal COLUMNSTORE compression.

Im folgenden Beispiel wird ein gruppierter columnstore-Index für die Verwendung der Archivierungskomprimierung neu erstellt. Anschließend wird gezeigt, wie die Archivierungskomprimierung entfernt wird.The following example rebuilds a clustered columnstore index to use archival compression, and then shows how to remove the archival compression. Letztendlich wird nur die columnstore-Komprimierung verwendet.The final result will use only columnstore compression.

--Prepare the example by creating a table with a clustered columnstore index.  
CREATE TABLE SimpleTable (  
    ProductKey [int] NOT NULL,   
    OrderDateKey [int] NOT NULL,   
    DueDateKey [int] NOT NULL,   
    ShipDateKey [int] NOT NULL  
);  

CREATE CLUSTERED INDEX cci_SimpleTable ON SimpleTable (ProductKey);  

CREATE CLUSTERED COLUMNSTORE INDEX cci_SimpleTable  
ON SimpleTable  
WITH (DROP_EXISTING = ON);  

--Compress the table further by using archival compression.  
ALTER INDEX cci_SimpleTable ON SimpleTable  
REBUILD  
WITH (DATA_COMPRESSION = COLUMNSTORE_ARCHIVE);  

--Remove the archive compression and only use columnstore compression.  
ALTER INDEX cci_SimpleTable ON SimpleTable  
REBUILD  
WITH (DATA_COMPRESSION = COLUMNSTORE);  
GO  

Beispiele: Rowstore-IndizesExamples: Rowstore indexes

A.A. Neuerstellen eines IndexRebuilding an index

Im folgenden Beispiel wird ein einzelner Index für die Employee-Tabelle der AdventureWorks2012AdventureWorks2012-Datenbank neu erstellt.The following example rebuilds a single index on the Employee table in the AdventureWorks2012AdventureWorks2012 database.

ALTER INDEX PK_Employee_EmployeeID ON HumanResources.Employee REBUILD;  

B.B. Neuerstellen aller Indizes einer Tabelle und Angeben von OptionenRebuilding all indexes on a table and specifying options

Im folgenden Beispiel wird das Schlüsselwort ALL angegeben.The following example specifies the keyword ALL. Dadurch werden alle Indizes neu erstellt, die der Production.Product-Tabelle in der AdventureWorks2012AdventureWorks2012-Datenbank zugeordnet sind.This rebuilds all indexes associated with the table Production.Product in the AdventureWorks2012AdventureWorks2012 database. Es werden drei Optionen angegeben.Three options are specified.

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2008SQL Server 2008) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL-DatenbankSQL Database.

ALTER INDEX ALL ON Production.Product  
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = ON);  

Im folgenden Beispiel werden die ONLINE-Option einschließlich der Option für Sperren mit niedriger Priorität sowie die Zeilenkomprimierungsoption hinzugefügt.The following example adds the ONLINE option including the low priority lock option, and adds the row compression option.

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2014SQL Server 2014) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2014SQL Server 2014) and SQL-DatenbankSQL Database.

ALTER INDEX ALL ON Production.Product  
REBUILD WITH   
(  
    FILLFACTOR = 80,   
    SORT_IN_TEMPDB = ON,  
    STATISTICS_NORECOMPUTE = ON,  
    ONLINE = ON ( WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 4 MINUTES, ABORT_AFTER_WAIT = BLOCKERS ) ),   
    DATA_COMPRESSION = ROW  
);  

C.C. Neuorganisieren eines Indexes mit LOB-KomprimierungReorganizing an index with LOB compaction

Im folgenden Beispiel wird ein einzelner gruppierter Index in der AdventureWorks2012AdventureWorks2012-Datenbank neu organisiert.The following example reorganizes a single clustered index in the AdventureWorks2012AdventureWorks2012 database. Da der Index einen LOB-Datentyp in der Blattebene enthält, komprimiert die Anweisung auch alle Seiten, die die LOB-Daten enthalten.Because the index contains a LOB data type in the leaf level, the statement also compacts all pages that contain the large object data. Beachten Sie, dass die Angabe der WITH (LOB_COMPACTION)-Option nicht erforderlich ist, da der Standardwert auf ON festgelegt ist.Note that specifying the WITH (LOB_COMPACTION) option is not required because the default value is ON.

ALTER INDEX PK_ProductPhoto_ProductPhotoID ON Production.ProductPhoto REORGANIZE WITH (LOB_COMPACTION);  

D.D. Festlegen von Optionen für einen IndexSetting options on an index

Im folgenden Beispiel werden mehrere Optionen für den AK_SalesOrderHeader_SalesOrderNumber-Index in der AdventureWorks2012AdventureWorks2012-Datenbank festgelegt.The following example sets several options on the index AK_SalesOrderHeader_SalesOrderNumber in the AdventureWorks2012AdventureWorks2012 database.

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2008SQL Server 2008) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL-DatenbankSQL Database.

ALTER INDEX AK_SalesOrderHeader_SalesOrderNumber ON  
    Sales.SalesOrderHeader  
SET (  
    STATISTICS_NORECOMPUTE = ON,  
    IGNORE_DUP_KEY = ON,  
    ALLOW_PAGE_LOCKS = ON  
    ) ;  
GO

E.E. Deaktivieren eines IndexesDisabling an index

Im folgenden Beispiel wird ein nicht gruppierter Index für die Employee-Tabelle der AdventureWorks2012AdventureWorks2012-Datenbank deaktiviert.The following example disables a nonclustered index on the Employee table in the AdventureWorks2012AdventureWorks2012 database.

ALTER INDEX IX_Employee_ManagerID ON HumanResources.Employee DISABLE;

F.F. Deaktivieren von EinschränkungenDisabling constraints

Im folgende Beispiel wird eine PRIMARY KEY-Einschränkung deaktiviert, durch das Deaktivieren des PRIMARY KEY-Indexes in der AdventureWorks2012AdventureWorks2012 Datenbank.The following example disables a PRIMARY KEY constraint by disabling the PRIMARY KEY index in the AdventureWorks2012AdventureWorks2012 database. Die FOREIGN KEY-Einschränkung für die zugrunde liegende Tabelle wird automatisch deaktiviert, und eine Warnmeldung wird angezeigt.The FOREIGN KEY constraint on the underlying table is automatically disabled and warning message is displayed.

ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department DISABLE;  

Das Resultset gibt diese Warnmeldung zurück.The result set returns this warning message.

Warning: Foreign key 'FK_EmployeeDepartmentHistory_Department_DepartmentID'  
on table 'EmployeeDepartmentHistory' referencing table 'Department'  
was disabled as a result of disabling the index 'PK_Department_DepartmentID'.

G.G. Aktivieren von EinschränkungenEnabling constraints

Im folgenden Beispiel werden die in Beispiel F deaktivierten PRIMARY KEY- und FOREIGN KEY-Einschränkungen aktiviert.The following example enables the PRIMARY KEY and FOREIGN KEY constraints that were disabled in Example F.

Die PRIMARY KEY-Einschränkung wird aktiviert, indem der PRIMARY KEY-Index neu erstellt wird.The PRIMARY KEY constraint is enabled by rebuilding the PRIMARY KEY index.

ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department REBUILD;  

Anschließend wird die FOREIGN KEY-Einschränkung aktiviert.The FOREIGN KEY constraint is then enabled.

ALTER TABLE HumanResources.EmployeeDepartmentHistory  
CHECK CONSTRAINT FK_EmployeeDepartmentHistory_Department_DepartmentID;  
GO  

H.H. Neuerstellen eines partitionierten IndexesRebuilding a partitioned index

Im folgenden Beispiel wird eine einzelne Partition mit der Partitionsnummer 5 des partitionierten IX_TransactionHistory_TransactionDate-Indexes in der AdventureWorks2012AdventureWorks2012-Datenbank neu erstellt.The following example rebuilds a single partition, partition number 5, of the partitioned index IX_TransactionHistory_TransactionDate in the AdventureWorks2012AdventureWorks2012 database. Partition 5 wird online neu erstellt, und die zehnminütige Wartezeit für die Sperre mit niedriger Priorität gilt für jede einzelne Sperre, die durch die Indexneuerstellung abgerufen wird.Partition 5 is rebuilt online and the 10 minutes wait time for the low priority lock applies separately to every lock acquired by index rebuild operation. Wenn während dieser Zeit die Sperre nicht für die komplette Neuerstellung des Indexes reicht, wird die Anweisung für die Neuerstellung abgebrochen.If during this time the lock cannot be obtained to complete index rebuild, the rebuild operation statement is aborted.

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2014SQL Server 2014) und SQL-DatenbankSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2014SQL Server 2014) and SQL-DatenbankSQL Database.

-- Verify the partitioned indexes.  
SELECT *  
FROM sys.dm_db_index_physical_stats (DB_ID(),OBJECT_ID(N'Production.TransactionHistory'), NULL , NULL, NULL);  
GO  
--Rebuild only partition 5.  
ALTER INDEX IX_TransactionHistory_TransactionDate  
ON Production.TransactionHistory  
REBUILD Partition = 5   
   WITH (ONLINE = ON (WAIT_AT_LOW_PRIORITY (MAX_DURATION = 10 minutes, ABORT_AFTER_WAIT = SELF)));  
GO  

I.I. Ändern der Komprimierungseinstellung eines IndexesChanging the compression setting of an index

Im folgenden Beispiel wird ein Index für eine nicht partitionierte rowstore-Tabelle neu erstellt.The following example rebuilds an index on a nonpartitioned rowstore table.

ALTER INDEX IX_INDEX1   
ON T1  
REBUILD   
WITH (DATA_COMPRESSION = PAGE);  
GO  

Zusätzliche Beispiele zur datenkomprimierung finden Sie unter Datenkomprimierung.For additional data compression examples, see Data Compression.

J.J. Fortsetzbare onlineneuerstellung von IndizesOnline resumable index rebuild

Gilt für: SQL ServerSQL Server (beginnend mit SQL Server 2017SQL Server 2017) und SQL-DatenbankSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017SQL Server 2017) and SQL-DatenbankSQL Database

Die folgenden Beispiele zeigen, wie fortsetzbar onlineneuerstellung von Indizes verwendet wird.The following examples show how to use online resumable index rebuild.

  1. Führen Sie eine online-indexneuerstellung als fortsetzbar Vorgang mit MAXDOP = 1.Execute an online index rebuild as resumable operation with MAXDOP=1.

    ALTER INDEX test_idx on test_table REBUILD WITH (ONLINE=ON, MAXDOP=1, RESUMABLE=ON) ;
    
  2. Ausführung derselben wird nachdem ein Indexvorgang angehalten wurde, Befehl erneut aus (siehe oben) automatisch die Neuerstellung des Index.Executing the same command again (see above) after an index operation was paused, resumes automatically the index rebuild operation.

  3. Führen Sie eine online-indexneuerstellung als fortsetzbar Vorgang mit MAX_DURATION auf 240 Minuten festgelegt ist.Execute an online index rebuild as resumable operation with MAX_DURATION set to 240 minutes.

    ALTER INDEX test_idx on test_table REBUILD WITH (ONLINE=ON, RESUMABLE=ON, MAX_DURATION=240) ; 
    
  4. Anhalten einer laufenden fortsetzbar online-indexneuerstellung.Pause a running resumable online index rebuild.

    ALTER INDEX test_idx on test_table PAUSE ;
    
  5. Fortsetzen einer online-indexneuerstellung für das Neuerstellen eines Index, das ausgeführt wurde, als fortsetzbar Vorgang unter Angabe einen neuen Wert für MAXDOP auf 4 festgelegt.Resume an online index rebuild for an index rebuild that was executed as resumable operation specifying a new value for MAXDOP set to 4.

    ALTER INDEX test_idx on test_table RESUME WITH (MAXDOP=4) ;
    
  6. Fortsetzen eines Vorgangs zur onlineindexneuerstellung für eine indexneuerstellung online, die als fortsetzbar ausgeführt wurde.Resume an online index rebuild operation for an index online rebuild that was executed as resumable. MAXDOP auf 2 festgelegt, legen Sie die Ausführungszeit für den Index als Resmumable ausgeführt werden, und 240 Minuten eingestellt und im Falle eines Indexes, 10 Minuten auf den Wartevorgang auf eine Sperre blockiert, und beenden Sie danach alle Hindernisse.Set MAXDOP to 2, set the execution time for the index being running as resmumable to 240 minutes and in case of an index being blocked on the lock wait 10 minutes and after that kill all blockers.

       ALTER INDEX test_idx on test_table  
          RESUME WITH (MAXDOP=2, MAX_DURATION= 240 MINUTES, 
          WAIT_AT_LOW_PRIORITY (MAX_DURATION=10, ABORT_AFTER_WAIT=BLOCKERS)) ;
    
  7. Brechen Sie fortsetzbar indexneuerstellungsvorgangs die ausgeführt oder angehalten wird ab.Abort resumable index rebuild operation which is running or paused.

    ALTER INDEX test_idx on test_table ABORT ;
    

Siehe auchSee Also

CREATE INDEX (Transact-SQL) CREATE INDEX (Transact-SQL)
CREATE SPATIAL INDEX (Transact-SQL) CREATE SPATIAL INDEX (Transact-SQL)
CREATE XML INDEX (Transact-SQL) CREATE XML INDEX (Transact-SQL)
DROP INDEX (Transact-SQL) DROP INDEX (Transact-SQL)
Deaktivieren von Indizes und Einschränkungen Disable Indexes and Constraints
XML-Indizes (SQL Server) XML Indexes (SQL Server)
Ausführen von Onlineindexvorgängen Perform Index Operations Online
Neuorganisieren und Neuerstellen von Indizes Reorganize and Rebuild Indexes
sys.dm_db_index_physical_stats (Transact-SQL) sys.dm_db_index_physical_stats (Transact-SQL)
EVENTDATA (Transact-SQL)EVENTDATA (Transact-SQL)