Dela via


Aktivera index och begränsningar

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

Den här artikeln beskriver hur du aktiverar ett inaktiverat index i SQL Server med hjälp av SQL Server Management Studio eller Transact-SQL. När ett index har inaktiverats förblir det i inaktiverat tillstånd tills det återskapas eller tas bort.

Limitations

När indexet har återskapats måste alla begränsningar som inaktiverades på grund av inaktivering av indexet aktiveras manuellt. PRIMARY KEY- och UNIQUE-begränsningar aktiveras genom att det associerade indexet återskapas. Det här indexet måste återskapas (aktiveras) innan du kan aktivera FOREIGN KEY begränsningar som refererar till PRIMARY KEY eller UNIQUE villkoret. FOREIGN KEY begränsningar aktiveras med hjälp av instruktionen ALTER TABLE CHECK CONSTRAINT.

Det går inte att bygga om ett inaktiverat klustrat index när alternativet ONLINE är inställt på ON.

När det klustrade indexet är inaktiverat eller aktiverat och det icke-grupperade indexet har inaktiverats, har den klustrade indexåtgärden följande resultat på det inaktiverade icke-grupperade indexet.

Klustrad indexåtgärd Inaktiverad icke-grupperad indexstatus
ALTER INDEX REBUILD Remains disabled
ALTER INDEX ALL REBUILD Återuppbyggd och aktiverad
DROP INDEX Återuppbyggd och aktiverad
CREATE INDEX WITH DROP_EXISTING Remains disabled

Att skapa ett nytt klustrat index fungerar på samma sätt som ALTER INDEX ALL REBUILD.

Tillåtna åtgärder för icke-grupperade index som är associerade med ett klustrat index beror på tillståndet, oavsett om det är inaktiverat eller aktiverat, av båda indextyperna. I följande tabell sammanfattas de tillåtna åtgärderna för icke-klustrade index.

Icke-klustrad indexåtgärd När både klustrade och icke-klustrade index är inaktiverade När det klustrade indexet är aktiverat och det icke-grupperade indexet är i något av tillstånden
ALTER INDEX REBUILD Åtgärden misslyckas Åtgärden lyckas
DROP INDEX Åtgärden lyckas Åtgärden lyckas
CREATE INDEX WITH DROP_EXISTING Åtgärden misslyckas Åtgärden lyckas

När du återskapar inaktiverade komprimerade icke-grupperade index är data_compression standardvärdet none, vilket innebär att indexen inte är komprimerade. Detta beror på att metadata för komprimeringsinställningar går förlorade när icke-grupperade index inaktiveras. För att undvika det här problemet måste du ange explicit datakomprimering i återskapande-instruktionen.

Permissions

Kräver ALTER behörighet i tabellen eller vyn. Om du använder DBCC DBREINDEXmåste du antingen äga tabellen eller vara medlem i den fasta serverrollen sysadmin eller vara medlem i db_ddladmin eller db_owner fasta databasroller.

Använda SQL Server Management Studio

Aktivera ett inaktiverat index

  1. I Object Explorer väljer du plustecknet för att expandera databasen som innehåller den tabell där du vill aktivera ett index.

  2. Välj plustecknet för att expandera mappen Tables.

  3. Välj plustecknet för att expandera tabellen där du vill aktivera ett index.

  4. Välj plustecknet för att expandera mappen Index.

  5. Högerklicka på det index som du vill aktivera och välj Återskapa.

  6. I dialogrutan Återskapa index kontrollerar du att rätt index finns i Index för att återskapa rutnät och välja OK.

Aktivera alla index i en tabell

  1. I Object Explorer väljer du plustecknet för att expandera databasen som innehåller den tabell där du vill aktivera indexen.

  2. Välj plustecknet för att expandera mappen Tables.

  3. Välj plustecknet för att expandera tabellen där du vill aktivera indexen.

  4. Högerklicka på mappen Index och välj Återskapa alla.

  5. I dialogrutan Återskapa index kontrollerar du att rätt index finns i indexen för att återskapa rutnätet och väljer OK. Om du vill ta bort ett index från indexen för att återskapa rutnätet väljer du indexet och trycker sedan på ta bort.

Följande information är tillgänglig i dialogrutan Återskapa index :

Use Transact-SQL

Kodexemplen i den här artikeln använder AdventureWorks2022- eller AdventureWorksDW2022-exempeldatabasen, som du kan ladda ned från startsidan Microsoft SQL Server Samples och Community Projects.

Aktivera ett inaktiverat index med ALTER INDEX

Kör följande Transact-SQL skript. Det här exemplet aktiverar indexet IX_Employee_OrganizationLevel_OrganizationNode i HumanResources.Employee tabellen.

USE AdventureWorks2022;
GO

ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode
ON HumanResources.Employee REBUILD;
GO

Aktivera ett inaktiverat index med CREATE INDEX

Kör följande Transact-SQL skript. Det här exemplet återskapar indexet IX_Employee_OrganizationLevel_OrganizationNode i HumanResources.Employee tabellen med hjälp av kolumnerna OrganizationLevel och OrganizationNode och tar sedan bort det befintliga IX_Employee_OrganizationLevel_OrganizationNode indexet.

USE AdventureWorks2022;
GO

CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode
ON HumanResources.Employee(OrganizationLevel, OrganizationNode) WITH (DROP_EXISTING = ON);
GO

Aktivera ett inaktiverat index med DBCC DBREINDEX

Note

Den här funktionen tas bort i en framtida version av SQL Server. Undvik att använda den här funktionen i nytt utvecklingsarbete och planera att ändra program som för närvarande använder den här funktionen.

Kör följande Transact-SQL skript. Det här exemplet aktiverar indexet IX_Employee_OrganizationLevel_OrganizationNode i HumanResources.Employee tabellen.

USE AdventureWorks2022;
GO

DBCC DBREINDEX ("HumanResources.Employee", IX_Employee_OrganizationLevel_OrganizationNode);
GO

Aktivera alla index i en tabell med ALTER INDEX

Kör följande Transact-SQL skript. Det här exemplet aktiverar alla index i HumanResources.Employee tabellen.

USE AdventureWorks2022;
GO

ALTER INDEX ALL
ON HumanResources.Employee REBUILD;
GO

Aktivera alla index i en tabell med DBCC DBREINDEX

Note

Den här funktionen tas bort i en framtida version av SQL Server. Undvik att använda den här funktionen i nytt utvecklingsarbete och planera att ändra program som för närvarande använder den här funktionen.

Kör följande Transact-SQL skript. Det här exemplet aktiverar alla index i HumanResources.Employee tabellen.

USE AdventureWorks2022;
GO

DBCC DBREINDEX ("HumanResources.Employee", " ");
GO