Delen via


ALTER TABLE index_option (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric Preview

Hiermee geeft u een set opties op die kunnen worden toegepast op een index die deel uitmaakt van een beperkingsdefinitie die wordt gemaakt met behulp van ALTER TABLE.

Zie CREATE INDEX voor een volledige beschrijving van indexopties.

Transact-SQL syntaxis-conventies

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 }
  | OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | OFF }
  | SORT_IN_TEMPDB = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }
      [ ON PARTITIONS ( { <partition_number_expression> | <range> }
      [ , ...n ] ) ]
  | XML_COMPRESSION = { ON | OFF }
      [ ON PARTITIONS ( { <partition_number_expression> | <range> }
      [ , ...n ] ) ]
  | ONLINE = { ON | OFF }
  | RESUMABLE = { ON | OFF }
  | MAX_DURATION = <time> [ MINUTES ]
}

<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 } )
}

Arguments

PAD_INDEX = { ON | UIT }

Van toepassing op: SQL Server 2008 (10.0.x) en latere versies

Hiermee geeft u indexopvulling. De standaardwaarde is OFF.

  • ON

    Het percentage vrije ruimte dat is opgegeven door FILLFACTOR , wordt toegepast op de pagina's op tussenliggend niveau van de index.

  • UIT of fillfactor is niet opgegeven

    De pagina's op tussenliggend niveau worden gevuld tot bijna capaciteit, waardoor er voldoende ruimte is voor ten minste één rij met de maximale grootte van de index, gezien de set sleutels op de tussenliggende pagina's.

FILLFACTOR = fillfactor

Van toepassing op: SQL Server 2008 (10.0.x) en latere versies

Hiermee geeft u een percentage op dat aangeeft hoe vol de database-engine het bladniveau van elke indexpagina moet maken tijdens het maken of wijzigen van de index. De opgegeven waarde moet een geheel getal tussen 1 en 100 zijn. De standaardwaarde is 0.

Note

Vulfactorwaarden 0 en 100 zijn in alle opzichten identiek.

IGNORE_DUP_KEY = { ON | UIT }

Hiermee geeft u het antwoordtype op wanneer een invoegbewerking probeert dubbele sleutelwaarden in een unieke index in te voegen. De optie IGNORE_DUP_KEY is alleen van toepassing op het invoegen van bewerkingen nadat de index is gemaakt of opnieuw is opgebouwd. De optie heeft geen effect bij het uitvoeren van CREATE INDEX, ALTER INDEXof UPDATE. De standaardwaarde is OFF.

  • ON

    Er treedt een waarschuwingsbericht op wanneer dubbele sleutelwaarden worden ingevoegd in een unieke index. Alleen de rijen die de uniekheidsbeperking schenden, mislukken.

  • OFF

    Er treedt een foutbericht op wanneer dubbele sleutelwaarden worden ingevoegd in een unieke index. De hele INSERT bewerking wordt teruggedraaid.

IGNORE_DUP_KEY kan niet worden ingesteld ON op indexen die zijn gemaakt in een weergave, niet-actieve indexen, XML-indexen, ruimtelijke indexen en gefilterde indexen.

Als u IGNORE_DUP_KEYwilt weergeven, gebruikt u sys.indexes.

In achterwaarts compatibele syntaxis is WITH IGNORE_DUP_KEY gelijk aan WITH IGNORE_DUP_KEY = ON.

STATISTICS_NORECOMPUTE = { AAN | UIT }

Schakel de optie AUTO_STATISTICS_UPDATEvoor het bijwerken van automatische statistieken uit of in, voor de statistieken met betrekking tot de opgegeven indexen. De standaardwaarde is OFF.

  • ON

    Automatische updates voor statistieken worden uitgeschakeld nadat de index opnieuw is opgebouwd.

  • OFF

    Automatische updates voor statistieken worden ingeschakeld nadat de index opnieuw is opgebouwd.

Als u het automatisch bijwerken van statistieken wilt herstellen, stelt u de STATISTICS_NORECOMPUTE in op OFFof voert u UPDATE STATISTICS uit zonder de NORECOMPUTE component.

Warning

Als u het automatisch bijwerken van statistieken uitschakelt, kan het voorkomen dat queryoptimalisatie optimale uitvoeringsplannen kiest voor query's die betrekking hebben op de tabel. Gebruik deze optie spaarzaam en alleen door een gekwalificeerde databasebeheerder.

Deze instelling voorkomt geen automatische update met volledige scan van de indexgerelateerde statistieken tijdens de herbouwbewerking.

ALLOW_ROW_LOCKS = { AAN | UIT }

Van toepassing op: SQL Server 2008 (10.0.x) en latere versies

Hiermee geeft u op of rijvergrendelingen zijn toegestaan. De standaardwaarde is AAN.

  • ON

    Rijvergrendelingen zijn toegestaan bij toegang tot de index. De database-engine bepaalt wanneer rijvergrendelingen worden gebruikt.

  • OFF

    Rijvergrendelingen worden niet gebruikt.

ALLOW_PAGE_LOCKS = { AAN | UIT }

Van toepassing op: SQL Server 2008 (10.0.x) en latere versies

Hiermee geeft u op of paginavergrendelingen zijn toegestaan. De standaardwaarde is AAN.

  • ON

    Paginavergrendelingen zijn toegestaan bij toegang tot de index. De database-engine bepaalt wanneer paginavergrendelingen worden gebruikt.

  • OFF

    Paginavergrendelingen worden niet gebruikt.

OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | UIT }

Van toepassing op: SQL Server 2019 (15.x) en latere versies

Hiermee geeft u op of het al dan niet moet worden geoptimaliseerd voor conflicten met het invoegen van laatste pagina's. De standaardwaarde is OFF. Zie de sectie Sequentiële sleutels van het CREATE INDEX artikel voor meer informatie.

SORT_IN_TEMPDB = { ON | UIT }

Van toepassing op: SQL Server 2008 (10.0.x) en latere versies

Hiermee geeft u op of sorteerresultaten moeten worden opgeslagen in tempdb. De standaardwaarde is OFF.

  • ON

    De tussenliggende sorteerresultaten die worden gebruikt om de index te bouwen, worden opgeslagen in tempdb. Dit kan de tijd verminderen die nodig is om een index te maken als tempdb deze zich op een andere set schijven bevindt dan de gebruikersdatabase. Dit verhoogt echter de hoeveelheid schijfruimte die wordt gebruikt tijdens de indexbuild.

  • OFF

    De tussenliggende sorteerresultaten worden opgeslagen in dezelfde database als de index.

ONLINE = { ON | UIT }

Van toepassing op: SQL Server 2008 (10.0.x) en latere versies

Hiermee geeft u op of onderliggende tabellen en bijbehorende indexen beschikbaar zijn voor query's en gegevenswijziging tijdens de indexbewerking. De standaardwaarde is OFF. REBUILD kan worden uitgevoerd als een ONLINE bewerking.

Note

Unieke niet-geclusterde indexen kunnen niet online worden gemaakt. Dit omvat indexen die worden gemaakt vanwege een UNIQUE of PRIMARY KEY meer beperkingen.

  • ON

    Langetermijntabelvergrendelingen worden niet bewaard tijdens de indexbewerking. Tijdens de hoofdfase van de indexbewerking wordt alleen een Intent Share-vergrendeling (IS) op de brontabel bewaard. Hierdoor kunnen query's of updates voor de onderliggende tabel en indexen worden voortgezet. Aan het begin van de bewerking wordt een gedeelde vergrendeling (S) gedurende een korte periode op het bronobject bewaard. Aan het einde van de bewerking wordt gedurende een korte periode een S-vergrendeling (Gedeeld) verkregen op de bron als er een niet-geclusterde index wordt gemaakt; of een Sch-M -vergrendeling (schemawijziging) wordt verkregen wanneer een geclusterde index online wordt gemaakt of verwijderd en wanneer een geclusterde of niet-geclusterde index opnieuw wordt opgebouwd. Hoewel de online indexvergrendelingen korte metagegevensvergrendelingen zijn, moet met name de Sch-M-vergrendeling wachten tot alle blokkeringstransacties in deze tabel zijn voltooid. Tijdens de wachttijd blokkeert de Sch-M vergrendeling alle andere transacties die achter deze vergrendeling wachten bij het openen van dezelfde tabel. ONLINE kan niet worden ingesteld op ON wanneer een index wordt gemaakt in een lokale tijdelijke tabel.

    Note

    Het opnieuw samenstellen van online indexen kan de low_priority_lock_wait opties instellen die verderop in deze sectie worden beschreven. low_priority_lock_wait beheert S en Sch-M vergrendelingsprioriteit tijdens het opnieuw samenstellen van online indexen.

  • OFF

    Tabelvergrendelingen worden toegepast tijdens de indexbewerking. Hiermee voorkomt u dat alle gebruikers tijdens de bewerking toegang hebben tot de onderliggende tabel. Een offline indexbewerking waarmee een geclusterde index wordt gemaakt, opnieuw wordt opgebouwd of verwijderd, of een niet-geclusterde index wordt opgebouwd of verwijderd, wordt een schemawijziging (Sch-M) voor de tabel verkregen. Hiermee voorkomt u dat alle gebruikers tijdens de bewerking toegang hebben tot de onderliggende tabel. Een offline indexbewerking waarmee een niet-geclusterde index wordt gemaakt, verkrijgt een gedeelde (S)-vergrendeling op de tabel. Hiermee voorkomt u updates van de onderliggende tabel, maar staat u leesbewerkingen toe, zoals SELECT instructies.

Zie How Online Index Operations Workvoor meer informatie.

Note

Online indexbewerkingen zijn niet beschikbaar in elke editie van Microsoft SQL Server. Zie -edities en ondersteunde functies van SQL Server 2022voor een lijst met functies die worden ondersteund door de edities van SQL Server.

HERVATBAAR = { AAN | UIT}

Van toepassing op: SQL Server 2022 (16.x) en latere versies

Hiermee geeft u op of een ALTER TABLE ADD CONSTRAINT bewerking kan worden hervat. De bewerking Tabelbeperking toevoegen kan worden hervat wanneer ON. De bewerking Tabelbeperking toevoegen kan niet worden hervat wanneer OFF. De standaardinstelling is OFF. Wanneer de RESUMABLE optie is ingesteld op ON, is de optie ONLINE = ON vereist.

MAX_DURATION wanneer wordt gebruikt met RESUMABLE = ON (vereist ONLINE = ON) geeft de tijd aan (een geheel getal dat is opgegeven in minuten) dat een hervatbare online bewerking voor het toevoegen van beperkingen wordt uitgevoerd voordat deze wordt onderbroken. Als dit niet is opgegeven, wordt de bewerking voortgezet totdat deze is voltooid. MAXDOP wordt ook ondersteund met RESUMABLE = ON .

Zie Hervatbare tabelbeperkingen toevoegen voor meer informatie over het inschakelen en gebruiken van hervatbare ALTER TABLE ADD CONSTRAINT bewerkingen.

MAXDOP = max_degree_of_parallelism

Van toepassing op: SQL Server 2008 (10.0.x) en latere versies

Overschrijft de maximale mate van parallelle configuratie tijdens de indexbewerking. Zie De maximale mate van parallelle uitvoering (serverconfiguratieoptie) configurerenvoor meer informatie. Gebruik MAXDOP dit om het aantal processors dat wordt gebruikt in een parallelle uitvoering van een plan te beperken. Het maximum is 64 processoren.

max_degree_of_parallelism kan het volgende zijn:

  • 1: onderdrukt het genereren van parallelle plannen.
  • >1: Beperkt het maximum aantal processors dat in een parallelle indexbewerking wordt gebruikt tot het opgegeven aantal.
  • 0 (standaard): Gebruikt het werkelijke aantal processors of minder op basis van de huidige systeemworkload.

Zie Parallelle indexbewerkingen configurerenvoor meer informatie.

Note

Parallelle indexbewerkingen zijn niet beschikbaar in elke editie van Microsoft SQL Server. Zie -edities en ondersteunde functies van SQL Server 2022voor een lijst met functies die worden ondersteund door de edities van SQL Server.

DATA_COMPRESSION

Van toepassing op: SQL Server 2008 (10.0.x) en latere versies

Hiermee geeft u de optie voor gegevenscompressie voor de opgegeven tabel, partitienummer of bereik van partities. De opties zijn als volgt:

  • NONE

    Tabel- of opgegeven partities worden niet gecomprimeerd. Alleen van toepassing op rijopslagtabellen; is niet van toepassing op columnstore-tabellen.

  • ROW

    Tabel- of opgegeven partities worden gecomprimeerd met behulp van rijcompressie. Alleen van toepassing op rijopslagtabellen; is niet van toepassing op columnstore-tabellen.

  • PAGE

    Tabel- of opgegeven partities worden gecomprimeerd met behulp van paginacompressie. Alleen van toepassing op rijopslagtabellen; is niet van toepassing op columnstore-tabellen.

  • COLUMNSTORE

    Van toepassing op: SQL Server 2014 (12.x) en latere versies

    Alleen van toepassing op columnstore-tabellen. COLUMNSTORE geeft aan om een partitie die met de COLUMNSTORE_ARCHIVE optie is gecomprimeerd, te decomprimeren. Wanneer de gegevens worden hersteld, blijft de COLUMNSTORE index gecomprimeerd met de columnstore-compressie die wordt gebruikt voor alle columnstore-tabellen.

  • COLUMNSTORE_ARCHIVE

    Van toepassing op: SQL Server 2014 (12.x) en latere versies

    Is alleen van toepassing op columnstore-tabellen, die zijn opgeslagen met een geclusterde columnstore-index. COLUMNSTORE_ARCHIVE de opgegeven partitie verder comprimeert naar een kleinere grootte. Dit kan worden gebruikt voor archivering, of voor andere situaties die minder opslagruimte vereisen en meer tijd kunnen besparen voor opslag en ophalen

Zie Gegevenscompressievoor meer informatie over compressie.

XML_COMPRESSION

van toepassing op: SQL Server 2022 (16.x) en latere versies, Azure SQL Database en Azure SQL Managed Instance.

Hiermee geeft u de optie VOOR XML-compressie voor alle xml- gegevenstypekolommen in de tabel. De opties zijn als volgt:

  • ON

    Kolommen met het xml- gegevenstype worden gecomprimeerd.

  • OFF

    Kolommen met het xml- gegevenstype worden niet gecomprimeerd.

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

Van toepassing op: SQL Server 2008 (10.0.x) en latere versies

Hiermee geeft u de partities waarop de DATA_COMPRESSION of XML_COMPRESSION instellingen van toepassing zijn. Als de tabel niet is gepartitioneerd, genereert het argument ON PARTITIONS een fout. Als de ON PARTITIONS component niet is opgegeven, is de DATA_COMPRESSION of XML_COMPRESSION optie van toepassing op alle partities van een gepartitioneerde tabel.

<partition_number_expression> kunt u op de volgende manieren opgeven:

  • Geef het getal op dat een partitie is, bijvoorbeeld: ON PARTITIONS (2).
  • Geef de partitienummers op voor verschillende afzonderlijke partities, gescheiden door komma's, bijvoorbeeld: ON PARTITIONS (1, 5).
  • Geef zowel bereiken als afzonderlijke partities op, bijvoorbeeld: ON PARTITIONS (2, 4, 6 TO 8).

<range> kan worden opgegeven als partitienummers gescheiden door het woord AAN, bijvoorbeeld: ON PARTITIONS (6 TO 8).

Als u verschillende typen gegevenscompressie voor verschillende partities wilt instellen, geeft u de optie DATA_COMPRESSION meerdere keren op, bijvoorbeeld:

--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 de meeste gevallen wordt bij het herbouwen van een index ook alle partities van een gepartitioneerde index opnieuw opgebouwd. Als u de volgende opties toepast op één partitie, moet u niet alle partities opnieuw opbouwen.

  • SORT_IN_TEMPDB
  • MAXDOP
  • DATA_COMPRESSION
  • XML_COMPRESSION

low_priority_lock_wait

Van toepassing op: SQL Server 2014 (12.x) en latere versies

Het opnieuw samenstellen van een SWITCH of online index wordt voltooid zodra er geen blokkeringsbewerkingen voor deze tabel zijn. WAIT_AT_LOW_PRIORITY geeft aan dat als de herbouwbewerking van de SWITCH of online index niet onmiddellijk kan worden voltooid, deze wacht. De bewerking bevat vergrendelingen met een lage prioriteit, zodat andere bewerkingen die vergrendelingen bevatten die conflicteren met de DDL-instructie, worden voortgezet. Het weglaten van de optie WAIT AT LOW PRIORITY is gelijk aan WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE).

MAX_DURATION = tijd [ MINUTEN ]

De wachttijd (een geheel getal dat is opgegeven in minuten) die de vergrendeling voor het opnieuw samenstellen van de SWITCH onlineindex die moet worden verkregen, wacht bij het uitvoeren van de DDL-opdracht. De herbouwbewerking van de SWITCH of online index wordt onmiddellijk voltooid. Als de bewerking voor de MAX_DURATION tijd wordt geblokkeerd, wordt een van de ABORT_AFTER_WAIT acties uitgevoerd. MAX_DURATION tijd is altijd in minuten en het woord MINUTES kan worden weggelaten.

ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS }

  • NONE

    Hiermee wordt de herbouwbewerking van de SWITCH of online index voortgezet zonder de vergrendelingsprioriteit te wijzigen (met normale prioriteit).

  • SELF

    Hiermee sluit u de SWITCH DDL-bewerking of de online index opnieuw op die momenteel wordt uitgevoerd zonder actie te ondernemen.

  • BLOCKERS

    Hiermee worden alle gebruikerstransacties die momenteel de SWITCH DDL-bewerking of onlineindex herbouwen blokkeren, afgebouwd, zodat de bewerking kan worden voortgezet.

    BLOCKERS vereist de ALTER ANY CONNECTION machtiging.