Freigeben über


index_option (Transact-SQL)

Gibt eine Gruppe von Optionen an, die auf einen Index angewendet werden kann, der Teil einer mit ALTER TABLE erstellten Einschränkungsdefinition ist.

Gilt für: SQL Server (SQL Server 2008 bis aktuelle Version), Windows Azure SQL-Datenbank (Ursprüngliche Version bis aktuelle Version).

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen

Syntax

{ 
    PAD_INDEX = { ON | OFF }
  | FILLFACTOR = fillfactor
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { ON | OFF }
  | ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS = { ON | OFF }
  | SORT_IN_TEMPDB = { ON | OFF } 
  | ONLINE = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = { NONE |ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }
      [ ON PARTITIONS ( { <partition_number_expression> | <range> } 
      [ , ...n ] ) ]
  | ONLINE = { ON [ ( <low_priority_lock_wait> ) ] | OFF }
}

<range> ::= 
<partition_number_expression> TO <partition_number_expression>

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

<low_priority_lock_wait>::=
{
    WAIT_AT_LOW_PRIORITY ( MAX_DURATION = <time> [ MINUTES ] , 
                           ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS } ) 
}

Argumente

  • PAD_INDEX = { ON | OFF }

    Gilt für: SQL Server 2008 bis SQL Server 2014.

    Gibt die Auffüllung von Indizes an. Der Standardwert ist OFF.

    • ON
      Der Prozentsatz des mit FILLFACTOR angegebenen freien Speicherplatzes wird für die Zwischenebenenseiten des Indexes angewendet.

    • OFF oder fillfactor ist nicht angegeben.
      Die Zwischenebenenseiten werden nahezu vollständig aufgefüllt, wobei jedoch ausreichend freier Speicherplatz verfügbar bleibt, um mindestens eine Zeile in der maximal für diesen Index gültigen Größe aufzunehmen, die sich aus der Schlüsselmenge auf den Zwischenseiten ergibt.

  • FILLFACTOR **=**fillfactor

    Gilt für: SQL Server 2008 bis SQL Server 2014.

    Gibt einen Prozentsatz an, der anzeigt, wie weit Database Engine (Datenbankmodul) die Blattebene jeder Indexseite während der Indexerstellung oder -änderung füllen soll. Der angegebene Wert muss ein ganzzahliger Wert zwischen 1 und 100 sein. Der Standardwert ist 0.

    Hinweis

    Die Füllfaktorwerte 0 und 100 sind in jeglicher Hinsicht identisch.

  • IGNORE_DUP_KEY = { ON | OFF }
    Gibt die Fehlermeldung an, wenn ein Einfügevorgang versucht, doppelte Schlüsselwerte in einen eindeutigen Index einzufügen. Die IGNORE_DUP_KEY-Option gilt nur für Einfügevorgänge nach dem Erstellen oder Neuerstellen des Index. Beim Ausführen von CREATE INDEX, ALTER INDEX oder UPDATE hat die Option keine Auswirkungen. Der Standardwert ist OFF.

    • ON
      Eine Warnmeldung wird ausgegeben, wenn doppelte Schlüsselwerte in einen eindeutigen Index eingefügt werden. Es schlagen nur die Zeilen fehl, die gegen die Eindeutigkeitseinschränkung verstoßen.

    • OFF
      Eine Fehlermeldung wird ausgegeben, wenn doppelte Schlüsselwerte in einen eindeutigen Index eingefügt werden. Für den gesamten INSERT-Vorgang wird ein Rollback ausgeführt.

    IGNORE_DUP_KEY kann für Indizes, die für eine Sicht erstellt werden, nicht eindeutige Indizes, XML-Indizes, räumliche und gefilterte Indizes nicht auf ON festgelegt werden.

    Um IGNORE_DUP_KEY anzuzeigen, verwenden Sie sys.indexes.

    In abwärtskompatibler Syntax ist WITH IGNORE_DUP_KEY gleichwertig mit WITH IGNORE_DUP_KEY = ON.

  • STATISTICS_NORECOMPUTE = { ON | OFF }
    Gibt an, ob Statistiken neu berechnet werden. Der Standardwert ist OFF.

    • ON
      Veraltete Indexstatistiken werden nicht automatisch neu berechnet.

    • OFF
      Die automatischen Updates der Statistiken sind aktiviert.

  • ALLOW_ROW_LOCKS = { ON | OFF }

    Gilt für: SQL Server 2008 bis SQL Server 2014.

    Gibt an, ob Zeilensperren zulässig sind. Der Standardwert ist ON.

    • ON
      Zeilensperren sind beim Zugriff auf den Index zulässig. Das Database Engine (Datenbankmodul) bestimmt, wann Zeilensperren verwendet werden.

    • OFF
      Zeilensperren werden nicht verwendet.

  • ALLOW_PAGE_LOCKS = { ON | OFF }

    Gilt für: SQL Server 2008 bis SQL Server 2014.

    Gibt an, ob Seitensperren zulässig sind. Der Standardwert ist ON.

    • ON
      Seitensperren sind beim Zugriff auf den Index zulässig. Das Database Engine (Datenbankmodul) bestimmt, wann Seitensperren verwendet werden.

    • OFF
      Seitensperren werden nicht verwendet.

  • SORT_IN_TEMPDB = { ON | OFF }

    Gilt für: SQL Server 2008 bis SQL Server 2014.

    Gibt an, ob Ergebnisse in tempdb gespeichert werden sollen. Der Standardwert ist OFF.

    • ON
      Die Zwischenergebnisse von Sortierungen, mit denen der Index erstellt wird, werden in tempdb gespeichert. Dadurch kann sich die zum Erstellen eines Index erforderliche Zeit verringern, wenn sich tempdb auf einem anderen Datenträgersatz befindet als die Benutzerdatenbank. Sie erhöht jedoch den Betrag an Speicherplatz, der während der Indexerstellung verwendet wird.

    • OFF
      Die Zwischenergebnisse der Sortierung werden in derselben Datenbank gespeichert wie der Index.

  • ONLINE = { ON | OFF }

    Gilt für: SQL Server 2008 bis SQL Server 2014.

    Gibt an, ob die zugrunde liegenden Tabellen und zugeordneten Indizes für Abfragen und Datenänderungen während des Indexvorgangs verfügbar sind. Der Standardwert ist OFF. REBUILD kann als ONLINE-Vorgang ausgeführt werden.

    Hinweis

    Eindeutige nicht gruppierte Indizes können nicht online erstellt werden.Dies schließt Indizes ein, die aufgrund einer UNIQUE- oder PRIMARY KEY-Einschränkung erstellt werden.

    • ON
      Lang andauernde Sperren werden nicht für die Dauer des Indexvorgangs aufrechterhalten. Während der Hauptphase des Indexvorgangs wird nur eine beabsichtigte freigegebene Sperre (IS) für die Quelltabelle aufrechterhalten. Dadurch können Abfragen oder Updates für die zugrunde liegende Tabelle und die Indizes fortgesetzt werden. Zu Beginn des Vorgangs wird für sehr kurze Zeit eine freigegebene Sperre (S) für das Quellobjekt aufrechterhalten. Am Ende des Vorgangs wird für die Quelle für kurze Zeit eine freigegebene Sperre (S) aktiviert, wenn ein nicht gruppierter Index erstellt wird. Eine Schemaänderungssperre (SCH-M) wird aktiviert, wenn ein gruppierter Index online erstellt oder gelöscht und wenn ein gruppierter oder nicht gruppierter Index neu erstellt wird. Obwohl die Onlineindexsperren kurze Metadatensperren sind, muss insbesondere die Sch-M-Sperre warten, bis alle blockierenden Transaktionen für diese Tabelle abgeschlossen sind. Während der Wartezeit sperrt die Sch-M-Sperre alle anderen Transaktionen, die an dieser Sperre warten, wenn sie auf die gleiche Tabelle zugreifen. ONLINE kann nicht auf ON festgelegt werden, wenn ein Index auf einer lokalen temporären Tabelle erstellt wird.

      Hinweis

      Durch Neuerstellung von Onlineindizes können die low_priority_lock_wait-Optionen festgelegt werden, die weiter unten in diesem Abschnitt beschrieben werden.low_priority_lock_wait verwaltet die Priorität der S- und Sch-M-Sperren während der Online-Neuerstellung des Index.

    • OFF
      Die Tabellensperren werden für die Dauer des Indexvorgangs angewendet. Dadurch wird verhindert, dass Benutzer für die Dauer des Vorgangs auf die zugrunde liegende Tabelle zugreifen können. Ein Offlineindexvorgang, bei dem ein gruppierter Index erstellt, neu erstellt oder gelöscht bzw. ein nicht gruppierter Index neu erstellt oder gelöscht wird, aktiviert eine Schemaänderungssperre (SCH-M) für die Tabelle. Dadurch wird verhindert, dass Benutzer für die Dauer des Vorgangs auf die zugrunde liegende Tabelle zugreifen können. Ein Offlineindexvorgang, bei dem ein nicht gruppierter Index erstellt wird, aktiviert eine freigegebene Sperre (S) für die Tabelle. Dadurch werden Updates der zugrunde liegenden Tabelle verhindert. Lesevorgänge, wie SELECT-Anweisungen, sind jedoch zulässig.

    Weitere Informationen finden Sie unter Funktionsweise von Onlineindexvorgängen.

    Hinweis

    Onlineindexvorgänge sind nicht in jeder Edition von Microsoft SQL Server verfügbar.Eine Liste der Funktionen, die von den Editionen von SQL Server unterstützt werden, finden Sie unter Von den SQL Server 2014-Editionen unterstützte Funktionen.

  • MAXDOP **=**max_degree_of_parallelism

    Gilt für: SQL Server 2008 bis SQL Server 2014.

    Überschreibt die Konfigurationsoption Max. Grad an Parallelität für die Dauer des Indexvorgangs. Weitere Informationen finden Sie unter Konfigurieren der Serverkonfigurationsoption Max. Grad an Parallelität. Sie können mit MAXDOP die Anzahl der Prozessoren begrenzen, die bei der Ausführung paralleler Pläne verwendet werden. Maximal sind 64 Prozessoren zulässig.

    Mögliche Werte für max_degree_of_parallelism sind:

    • 1
      Unterdrückt das Generieren paralleler Pläne.

    • >1
      Begrenzt die Höchstzahl von Prozessoren in einem parallelen Indexvorgang auf die angegebene Zahl

    • 0 (Standard)
      Verwendet abhängig von der aktuellen Systemarbeitsauslastung die tatsächliche Anzahl von Prozessoren oder weniger Prozessoren.

    Weitere Informationen finden Sie unter Konfigurieren von Parallelindexvorgängen.

    Hinweis

    Parallele Indexvorgänge sind nicht in jeder Edition von Microsoft SQL Server verfügbar.Eine Liste der Funktionen, die von den Editionen von SQL Server unterstützt werden, finden Sie unter Von den SQL Server 2014-Editionen unterstützte Funktionen.

  • DATA_COMPRESSION

    Gilt für: SQL Server 2008 bis SQL Server 2014.

    Gibt die Datenkomprimierungsoption für die angegebene Tabelle, die Partitionsnummer oder den Bereich von Partitionen an. Folgende Optionen stehen zur Verfügung:

    • NONE
      Die Tabelle oder die angegebenen Partitionen werden nicht komprimiert. Gilt nur für rowstore-Tabellen und nicht für columnstore-Tabellen.

    • ROW
      Die Tabelle oder die angegebenen Partitionen werden mit Zeilenkomprimierung komprimiert. Gilt nur für rowstore-Tabellen und nicht für columnstore-Tabellen.

    • PAGE
      Die Tabelle oder die angegebenen Partitionen werden mit Seitenkomprimierung komprimiert. Gilt nur für rowstore-Tabellen und nicht für columnstore-Tabellen.

    • COLUMNSTORE

      Gilt für: SQL Server 2014 bis SQL Server 2014.

      Gilt nur für columnstore-Tabellen. COLUMNSTORE gibt an, dass eine Partition, die mit der COLUMNSTORE_ARCHIVE-Option komprimiert wurde, dekomprimiert werden soll. Nachdem die Daten wiederhergestellt wurden, sind sie weiterhin mit der columnstore-Komprimierung komprimiert, die für alle columnstore-Tabellen verwendet wird.

    • COLUMNSTORE_ARCHIVE

      Gilt für: SQL Server 2014 bis SQL Server 2014.

      Gilt nur für columnstore-Tabellen. Dies sind Tabellen, die mit einem gruppierten columnstore-Index gespeichert wurden. Durch COLUMNSTORE_ARCHIVE wird die angegebene Partition weiter in eine geringere Größe komprimiert. Dies empfiehlt sich bei der Archivierung und in Situationen, in denen es auf eine geringere Speicherbelegung und nicht auf den zusätzlichen Zeitaufwand für das Speichern und Abrufen ankommt.

    Weitere Informationen zur Komprimierung finden Sie unter Datenkomprimierung.

  • ON PARTITIONS ( { <partition_number_expression> | <range> } [ ,...n ] )

    Gilt für: SQL Server 2008 bis SQL Server 2014.

    Gibt die Partitionen an, für die die DATA_COMPRESSION-Einstellung gilt. Wenn die Tabelle nicht partitioniert ist, erzeugt das ON PARTITIONS-Argument einen Fehler. Wenn die ON PARTITIONS-Klausel nicht angegeben wird, gilt die DATA_COMPRESSION-Option für alle Partitionen einer partitionierten Tabelle.

    <partition_number_expression> kann auf die folgenden Weisen angegeben werden:

    • Geben Sie die Nummer einer Partition an, beispielsweise: ON PARTITIONS (2).

    • Geben Sie die Partitionsnummern mehrerer einzelner Partitionen durch Trennzeichen getrennt an, beispielsweise: ON PARTITIONS (1, 5).

    • Geben Sie sowohl Bereiche als auch einzelne Partitionen an, beispielsweise: ON PARTITIONS (2, 4, 6 TO 8).

    Für <range> können durch das Wort TO getrennte Partitionsnummern angegeben werden, beispielsweise: 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:

    --For rowstore tables
    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)
    )
    
    --For columnstore tables
    REBUILD WITH 
    (
    DATA_COMPRESSION = COLUMNSTORE ON PARTITIONS (1, 3, 5), 
    DATA_COMPRESSION = COLUMNSTORE_ARCHIVE ON PARTITIONS (2, 4, 6 TO 8)
    )
    
  • <single_partition_rebuild__option>
    In den meisten Fällen werden bei der Neuerstellung eines Index alle Partitionen eines partitionierten Index ebenfalls neu erstellt. Die folgenden Optionen erstellen nicht alle Partitionen neu, wenn sie auf eine einzelne Partition angewendet werden.

    • SORT_IN_TEMPDB

    • MAXDOP

    • DATA_COMPRESSION

  • low_priority_lock_wait

    Gilt für: SQL Server 2014 bis SQL Server 2014.

    Ein SWITCH oder eine Neuerstellung eines Onlineindexes wird abgeschlossen, sobald es keine blockierenden Vorgänge für diese Tabelle gibt. WAIT_AT_LOW_PRIORITY gibt an, dass der Vorgang wartet, wenn SWITCH oder die Neuerstellung des Onlineindexes nicht sofort abgeschlossen werden kann. Der Vorgang hält Sperren mit niedriger Priorität an und lässt die Fortsetzung anderer Vorgänge zu, die Sperren enthalten, die mit der DDL-Anweisung in Konflikt stehen. Die Option WAIT AT LOW PRIORITY wegzulassen, entspricht WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE).

  • MAX_DURATION = time [MINUTES ]
    Die Wartezeit (ein ganzzahliger Wert, in Minuten angegeben) der SWITCH-Sperre oder der abzurufenden Sperre für die Online-Neuerstellung des Index, wenn der DDL-Befehl ausgeführt wird. SWITCH oder die Online-Neuerstellung des Index versucht sofort, den Vorgang abzuschließen. Wenn der Vorgang während des MAX_DURATION-Zeitraums blockiert wird, wird eine der ABORT_AFTER_WAIT-Aktionen ausgeführt. MAX_DURATION ist immer in Minuten, und das Wort MINUTES kann ausgelassen werden.

  • ABOUT_AFTER_WAIT = [NONE | SELF | BLOCKERS } ]

    • NONE
      Setzt SWITCH oder die Neuerstellung des Onlineindexes fort, ohne die Sperrenpriorität zu ändern (mit der regulären Priorität).

    • SELF
      Beendet SWITCH oder den DDL-Vorgang zur Neuerstellung des Onlineindexes, der derzeit ausgeführt wird, ohne weitere Aktionen durchzuführen.

    • BLOCKERS
      Bricht alle Benutzertransaktionen ab, die derzeit SWITCH oder den DDL-Vorgang zur Neuerstellung des Onlineindexes blockieren, sodass der Vorgang fortgesetzt werden kann.

      Erfordert die ALTER ANY CONNECTION-Berechtigung.

Hinweise

Eine vollständige Beschreibung der Indexoptionen finden Sie unter CREATE INDEX (Transact-SQL).

Siehe auch

Verweis

ALTER TABLE (Transact-SQL)

column_constraint (Transact-SQL)

computed_column_definition (Transact-SQL)

table_constraint (Transact-SQL)