Dela via


ALTER TABLE index_option (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Förhandsversion av Microsoft Fabric

Anger en uppsättning alternativ som kan tillämpas på ett index som ingår i en villkorsdefinition som skapas med hjälp av ALTER TABLE.

En fullständig beskrivning av indexalternativ finns i SKAPA INDEX.

Transact-SQL syntaxkonventioner

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

gäller för: SQL Server 2008 (10.0.x) och senare versioner

Anger indexutfyllnad. Standardvärdet är OFF.

  • ON

    Procentandelen ledigt utrymme som anges av FILLFACTOR tillämpas på sidorna på mellannivå i indexet.

  • AV- eller fillfactor- har inte angetts

    Sidorna på mellannivå fylls till nära kapacitet, vilket ger tillräckligt med utrymme för minst en rad av den maximala storlek som indexet kan ha, med tanke på uppsättningen nycklar på mellanliggande sidor.

FILLFACTOR = fillfactor

gäller för: SQL Server 2008 (10.0.x) och senare versioner

Anger en procentandel som anger hur full databasmotorn ska göra lövnivån för varje indexsida när index skapas eller ändras. Det angivna värdet måste vara ett heltalsvärde från 1 till 100. Standardvärdet är 0.

Note

Fyllningsfaktorvärdena 0 och 100 är identiska i alla avseenden.

IGNORE_DUP_KEY = { ON | AV }

Anger svarstypen när en infogningsåtgärd försöker infoga duplicerade nyckelvärden i ett unikt index. Alternativet IGNORE_DUP_KEY gäller endast för infogningsåtgärder när indexet har skapats eller återskapats. Alternativet har ingen effekt när du kör CREATE INDEX, ALTER INDEXeller UPDATE. Standardvärdet är OFF.

  • ON

    Ett varningsmeddelande inträffar när dubbletter av nyckelvärden infogas i ett unikt index. Endast de rader som bryter mot unikhetsbegränsningen misslyckas.

  • OFF

    Ett felmeddelande uppstår när dubbletter av nyckelvärden infogas i ett unikt index. Hela INSERT-åtgärden återställs.

IGNORE_DUP_KEY kan inte anges till ON för index som skapats i en vy, icke-substantivindex, XML-index, rumsliga index och filtrerade index.

Om du vill visa IGNORE_DUP_KEYanvänder du sys.indexes.

I bakåtkompatibel syntax motsvarar WITH IGNORE_DUP_KEYWITH IGNORE_DUP_KEY = ON.

STATISTICS_NORECOMPUTE = { ON | AV }

Inaktivera eller aktivera alternativet för automatisk statistikuppdatering, AUTO_STATISTICS_UPDATE, för den statistik som är relaterad till de angivna indexen. Standardvärdet är OFF.

  • ON

    Automatiska statistikuppdateringar inaktiveras när indexet har återskapats.

  • OFF

    Automatiska statistikuppdateringar aktiveras när indexet har återskapats.

Om du vill återställa automatisk uppdatering av statistik anger du STATISTICS_NORECOMPUTE till OFFeller kör UPDATE STATISTICS utan NORECOMPUTE-satsen.

Warning

Om du inaktiverar automatisk uppdatering av statistik kan det hindra Frågeoptimeraren från att välja optimala körningsplaner för frågor som omfattar tabellen. Du bör använda det här alternativet sparsamt och endast av en kvalificerad databasadministratör.

Den här inställningen förhindrar inte en automatisk uppdatering med fullscan av indexrelaterad statistik under återskapandeåtgärden.

ALLOW_ROW_LOCKS = { ON | AV }

gäller för: SQL Server 2008 (10.0.x) och senare versioner

Anger om radlås tillåts. Standardvärdet är PÅ.

  • ON

    Radlås tillåts vid åtkomst till indexet. Databasmotorn avgör när radlås används.

  • OFF

    Radlås används inte.

ALLOW_PAGE_LOCKS = { ON | AV }

gäller för: SQL Server 2008 (10.0.x) och senare versioner

Anger huruvida sidlås är tillåtna. Standardvärdet är PÅ.

  • ON

    Sidlås tillåts vid åtkomst till indexet. Databasmotorn avgör när sidlås används.

  • OFF

    Sidlås används inte.

OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | AV }

Gäller för: SQL Server 2019 (15.x) och senare versioner

Anger om du vill optimera för att infoga konkurrens på sista sidan eller inte. Standardvärdet är OFF. Mer information finns i avsnittet Sekventiella nycklar i CREATE INDEX artikeln.

SORT_IN_TEMPDB = { ON | AV }

gäller för: SQL Server 2008 (10.0.x) och senare versioner

Anger om sorteringsresultatet ska lagras i tempdb. Standardvärdet är OFF.

  • ON

    Mellanliggande sorteringsresultat som används för att skapa indexet lagras i tempdb. Detta kan minska tiden som krävs för att skapa ett index om tempdb det finns på en annan uppsättning diskar än användardatabasen. Detta ökar dock mängden diskutrymme som används under indexversionen.

  • OFF

    Mellanliggande sorteringsresultat lagras i samma databas som indexet.

ONLINE = { ON | AV }

gäller för: SQL Server 2008 (10.0.x) och senare versioner

Anger om underliggande tabeller och associerade index är tillgängliga för frågor och dataändringar under indexåtgärden. Standardvärdet är OFF. REBUILD kan utföras som en ONLINE åtgärd.

Note

Det går inte att skapa unika icke-illustrerade index online. Detta inkluderar index som skapas på grund av en eller PRIMARY KEY -UNIQUEbegränsning.

  • ON

    Långsiktiga tabelllås hålls inte under indexåtgärden. Under huvudfasen av indexåtgärden lagras endast ett IS-lås (Intent Share) i källtabellen. Detta gör att frågor eller uppdateringar av den underliggande tabellen och index kan fortsätta. I början av åtgärden lagras ett delat lås (S) på källobjektet under en kort tidsperiod. I slutet av åtgärden förvärvas under en kort tidsperiod ett S-lås (delat) på källan om ett icke-grupperat index skapas. eller ett lås för Sch-M (schemaändring) hämtas när ett klustrat index skapas eller tas bort online och när ett grupperat eller icke-grupperat index återskapas. Även om onlineindexlåsen är korta metadatalås, måste särskilt Sch-M-låset vänta tills alla blockerande transaktioner har slutförts i den här tabellen. Under väntetiden blockerar Sch-M lås alla andra transaktioner som väntar bakom det här låset vid åtkomst till samma tabell. ONLINE kan inte anges till ON när ett index skapas i en lokal tillfällig tabell.

    Note

    Återskapade onlineindex kan ange de low_priority_lock_wait alternativ som beskrivs senare i det här avsnittet. low_priority_lock_wait hanterar S- och Sch-M låsprioritet vid återskapande av onlineindex.

  • OFF

    Tabelllås tillämpas under indexåtgärden. Detta förhindrar all användaråtkomst till den underliggande tabellen under åtgärden. En offlineindexåtgärd som skapar, återskapar eller släpper ett grupperat index, återskapar eller släpper ett icke-grupperat index, hämtar ett schemaändringslås (Sch-M) i tabellen. Detta förhindrar all användaråtkomst till den underliggande tabellen under åtgärden. En offlineindexåtgärd som skapar ett icke-grupperat index hämtar ett delat lås (S) i tabellen. Detta förhindrar uppdateringar av den underliggande tabellen men tillåter läsåtgärder, till exempel SELECT instruktioner.

Mer information finns i How Online Index Operations Work.

Note

Onlineindexåtgärder är inte tillgängliga i varje version av Microsoft SQL Server. En lista över funktioner som stöds av versionerna av SQL Server finns i Utgåvor och funktioner som stöds i SQL Server 2022.

RESUMABLE = { ON | OFF}

gäller för: SQL Server 2022 (16.x) och senare versioner

Anger om en ALTER TABLE ADD CONSTRAINT åtgärd kan återupptas. Åtgärden Lägg till tabellbegränsning kan återupptas när ON. Åtgärden Lägg till tabellbegränsning kan inte återupptas när OFF. Standard är OFF. När alternativet RESUMABLE är inställt på ONkrävs alternativet ONLINE = ON .

MAX_DURATION när det används med RESUMABLE = ON (kräver ONLINE = ON) anger tid (ett heltalsvärde som anges i minuter) att en återupptabar online-tilläggsbegränsningsåtgärd körs innan den pausas. Om inte anges fortsätter åtgärden tills den har slutförts. MAXDOP stöds också med RESUMABLE = ON .

Mer information om hur du aktiverar och använder återanvändbara åtgärder finns ALTER TABLE ADD CONSTRAINT i Återuppta tabellbegränsningar.

MAXDOP = max_degree_of_parallelism

gäller för: SQL Server 2008 (10.0.x) och senare versioner

Åsidosätter konfigurationsalternativet för maximal grad av parallellitet under indexåtgärden. Mer information finns i Konfigurera maximal grad av parallellitet (serverkonfigurationsalternativ). Använd MAXDOP för att begränsa antalet processorer som används i en parallell plankörning. Maximalt är 64 processorer.

max_degree_of_parallelism kan vara:

  • 1: Undertrycker parallell plangenerering.
  • >1: Begränsar det maximala antalet processorer som används i en parallell indexåtgärd till det angivna antalet.
  • 0 (standard): Använder det faktiska antalet processorer eller färre baserat på den aktuella systemarbetsbelastningen.

Mer information finns i Konfigurera parallella indexåtgärder.

Note

Parallella indexåtgärder är inte tillgängliga i varje version av Microsoft SQL Server. En lista över funktioner som stöds av versionerna av SQL Server finns i Utgåvor och funktioner som stöds i SQL Server 2022.

DATA_COMPRESSION

gäller för: SQL Server 2008 (10.0.x) och senare versioner

Anger datakomprimeringsalternativet för den angivna tabellen, partitionsnumret eller partitionsintervallet. Alternativen är följande:

  • NONE

    Tabell eller angivna partitioner komprimeras inte. Gäller endast för radlagringstabeller. gäller inte för kolumnlagringstabeller.

  • ROW

    Tabell eller angivna partitioner komprimeras med hjälp av radkomprimering. Gäller endast för radlagringstabeller. gäller inte för kolumnlagringstabeller.

  • PAGE

    Tabell eller angivna partitioner komprimeras med hjälp av sidkomprimering. Gäller endast för radlagringstabeller. gäller inte för kolumnlagringstabeller.

  • COLUMNSTORE

    Gäller för: SQL Server 2014 (12.x) och senare versioner

    Gäller endast för columnstore-tabeller. COLUMNSTORE anger att dekomprimera en partition som komprimerades med alternativet COLUMNSTORE_ARCHIVE . När data återställs fortsätter indexet COLUMNSTORE att komprimeras med den kolumnlagringskomprimering som används för alla kolumnlagringstabeller.

  • COLUMNSTORE_ARCHIVE

    Gäller för: SQL Server 2014 (12.x) och senare versioner

    Gäller endast för columnstore-tabeller, som är tabeller som lagras med ett grupperat columnstore-index. COLUMNSTORE_ARCHIVE komprimerar den angivna partitionen ytterligare till en mindre storlek. Detta kan användas för arkivering, eller för andra situationer som kräver mindre lagring och har råd med mer tid för lagring och hämtning

Mer information om komprimering finns i Datakomprimering.

XML_COMPRESSION

gäller för: SQL Server 2022 (16.x) och senare versioner, Azure SQL Database och Azure SQL Managed Instance.

Anger XML-komprimeringsalternativet för alla xml- datatypskolumner i tabellen. Alternativen är följande:

  • ON

    Kolumner som använder XML- datatyp komprimeras.

  • OFF

    Kolumner som använder XML- datatyp komprimeras inte.

PÅ PARTITIONER ( { <partition_number_expression> | <intervall> } [ ,...n ] )

gäller för: SQL Server 2008 (10.0.x) och senare versioner

Anger de partitioner som inställningarna för DATA_COMPRESSION eller XML_COMPRESSION gäller för. Om tabellen inte är partitionerad genererar argumentet ON PARTITIONS ett fel. ON PARTITIONS Om satsen inte tillhandahålls DATA_COMPRESSION gäller alternativet eller XML_COMPRESSION för alla partitioner i en partitionerad tabell.

<partition_number_expression> kan anges på följande sätt:

  • Ange numret som en partition, till exempel: ON PARTITIONS (2).
  • Ange partitionsnumren för flera enskilda partitioner avgränsade med kommatecken, till exempel: ON PARTITIONS (1, 5).
  • Ange både intervall och enskilda partitioner, till exempel: ON PARTITIONS (2, 4, 6 TO 8).

<range> kan anges som partitionsnummer avgränsade med ordet TO, till exempel: ON PARTITIONS (6 TO 8).

Om du vill ange olika typer av datakomprimering för olika partitioner anger du alternativet DATA_COMPRESSION mer än en gång, till exempel:

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

I de flesta fall återskapar återskapande av ett index även alla partitioner i ett partitionerat index. Följande alternativ, när de tillämpas på en enda partition, återskapar inte alla partitioner.

  • SORT_IN_TEMPDB
  • MAXDOP
  • DATA_COMPRESSION
  • XML_COMPRESSION

low_priority_lock_wait

Gäller för: SQL Server 2014 (12.x) och senare versioner

Återskapande av ett SWITCH eller onlineindex slutförs så snart det inte finns några blockeringsåtgärder för den här tabellen. WAIT_AT_LOW_PRIORITY anger att om återskapande SWITCH av eller onlineindex inte kan slutföras omedelbart väntar den. Åtgärden innehåller lås med låg prioritet, vilket gör att andra åtgärder som innehåller lås som står i konflikt med DDL-instruktionen kan fortsätta. Om du utelämnar alternativet WAIT AT LOW PRIORITY motsvarar det WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE).

MAX_DURATION = tid [ MINUTER ]

Väntetiden (ett heltalsvärde som anges i minuter) som SWITCH eller onlineindexet återskapar låset som måste hämtas väntar när DDL-kommandot körs. Återskapningsåtgärden SWITCH eller onlineindexet försöker slutföras omedelbart. Om åtgärden blockeras för MAX_DURATION tiden körs en av ABORT_AFTER_WAIT åtgärderna. MAX_DURATION tiden är alltid i minuter och ordet MINUTES kan utelämnas.

ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS }

  • NONE

    Fortsätter återskapande SWITCH av eller onlineindex utan att ändra låsprioriteten (med vanlig prioritet).

  • SELF

    Avslutar eller onlineindexet SWITCH återskapar DDL-åtgärden som för närvarande körs utan att vidta några åtgärder.

  • BLOCKERS

    Stoppar alla användartransaktioner som blockerar DDL-åtgärden för närvarande SWITCH eller onlineindexet så att åtgärden kan fortsätta.

    BLOCKERS kräver behörigheten ALTER ANY CONNECTION .