Inaktivera index och begränsningar
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Den här artikeln beskriver hur du inaktiverar ett index eller begränsningar i SQL Server med hjälp av SQL Server Management Studio eller Transact-SQL. Att inaktivera ett index förhindrar användaråtkomst till indexet och förhindrar även åtkomst till underliggande tabelldata för klustrade index. Indexdefinitionen finns kvar i metadata och indexstatistik sparas på icke-klustrade index. Om du inaktiverar ett grupperat index i en vy eller ett icke-grupperat index tas indexdata bort fysiskt.
Om du inaktiverar ett klustrat index i en tabell förhindras åtkomst till data. Data finns fortfarande kvar i tabellen, men är inte tillgängliga för DML-åtgärder (datamanipuleringsspråk) tills indexet tas bort eller återskapas.
Begränsningar
Indexet underhålls inte medan det är inaktiverat.
Frågeoptimeraren tar inte hänsyn till det inaktiverade indexet när man skapar frågekörningsplaner. Dessutom misslyckas frågor som refererar till det inaktiverade indexet med ett tabelltips.
Du kan inte skapa ett index som använder samma namn som ett befintligt inaktiverat index.
Ett inaktiverat index kan tas bort.
När du inaktiverar ett unikt index inaktiveras även villkoret PRIMARY KEY
eller UNIQUE
och alla FOREIGN KEY
som refererar till de indexerade kolumnerna från andra tabeller. När du inaktiverar ett klustrat index inaktiveras även alla inkommande och utgående FOREIGN KEY
begränsningar i den underliggande tabellen. Villkorsnamnen visas i ett varningsmeddelande när indexet är inaktiverat. När du har återskapat indexet måste alla begränsningar aktiveras manuellt med hjälp av instruktionen ALTER TABLE CHECK CONSTRAINT
.
Icke-grupperade index inaktiveras automatiskt när det associerade klustrade indexet inaktiveras. De kan inte aktiveras förrän antingen det klustrade indexet i tabellen eller vyn har aktiverats eller det klustrade indexet i tabellen har tagits bort. Icke-grupperade index måste uttryckligen aktiveras, såvida inte det klustrade indexet har aktiverats med hjälp av ALTER INDEX ALL REBUILD
-instruktionen.
Instruktionen ALTER INDEX ALL REBUILD
återskapar och aktiverar alla inaktiverade index i tabellen, förutom inaktiverade index på vyer. Index för vyer måste vara aktiverade i en separat ALTER INDEX ALL REBUILD
-instruktion.
Om du inaktiverar ett klustrat index i en tabell inaktiveras även alla klustrade och icke-grupperade index för vyer som refererar till tabellen. Dessa index måste återskapas precis som indexen i den refererade tabellen.
Dataraderna i det inaktiverade klustrade indexet kan inte nås förutom att släppa eller återskapa det klustrade indexet.
Du kan återskapa ett inaktiverat icke-grupperat index online när tabellen inte har ett inaktiverat grupperat index. Du måste dock alltid återskapa ett inaktiverat grupperat index offline om du använder instruktionen ALTER INDEX REBUILD
eller CREATE INDEX WITH DROP_EXISTING
. Mer information om onlineindexåtgärder finns i Utföra indexåtgärder online.
Det går inte att köra CREATE STATISTICS
-instruktionen på en tabell som har ett inaktiverat grupperat index.
Alternativet AUTO_CREATE_STATISTICS
databas skapar ny statistik i en kolumn när indexet är inaktiverat och följande villkor finns:
-
AUTO_CREATE_STATISTICS
är inställt påON
. - Det finns ingen befintlig statistik för kolumnen.
- Statistik krävs under frågeoptimering.
Om ett klustrat index är inaktiverat kan DBCC CHECKDB inte returnera information om den underliggande tabellen. i stället rapporterar instruktionen att det klustrade indexet är inaktiverat. DBCC INDEXDEFRAG kan inte användas för att defragmentera ett inaktiverat index. Satsen misslyckas med ett felmeddelande. Du kan använda DBCC DBREINDEX för att återskapa ett inaktiverat index.
Om du skapar ett nytt klustrat index kan du använda tidigare inaktiverade icke-grupperade index. Mer information finns i Aktivera index och begränsningar.
Om tabellen är en heap återskapas alla icke-grupperade index.
Behörigheter
Om du vill köra ALTER INDEX
krävs minst ALTER
behörighet på tabellen eller vyn.
Använda SQL Server Management Studio
Inaktivera ett index
I Object Explorer väljer du plustecknet för att expandera databasen som innehåller tabellen där du vill inaktivera ett index.
Välj plustecknet för att expandera mappen Tables.
Välj plustecknet för att expandera tabellen där du vill inaktivera ett index.
Välj plustecknet för att expandera mappen Index.
Högerklicka på det index som du vill inaktivera och välj Inaktivera.
Not
Om tabellen är öppen i Design läge är kontrollen Inaktivera inte tillgänglig. Om du vill fortsätta stänger du tabelldesignern och börjar om.
I dialogrutan Inaktivera index kontrollerar du att rätt index finns i Index för att inaktivera rutnät och välja OK.
Inaktivera alla index i en tabell
I Object Explorer väljer du plustecknet för att expandera databasen som innehåller den tabell där du vill inaktivera indexen.
Välj plustecknet för att expandera mappen Tables.
Välj plustecknet för att expandera tabellen där du vill inaktivera indexen.
Högerklicka på mappen Index och välj Inaktivera alla.
I dialogrutan Inaktivera index kontrollerar du att rätt index finns i Index för att inaktivera rutnät och välja OK. Om du vill ta bort ett index från Index för att inaktivera rutnät väljer du indexet och trycker sedan på tangenten Ta bort.
Följande information finns i dialogrutan Inaktivera index:
Indexnamn
Visar namnet på indexet. Under körningen visas även en ikon i den här kolumnen som representerar statusen.
Tabellnamn
Visar namnet på tabellen eller vyn som indexet skapades på.
indextyp
Visar indextypen: Clustered, Nonclustered, Spatialeller XML.
status
Visar status för inaktiveringsåtgärden. Möjliga värden efter körning av programmet är:
Blank
Före körningen är Status tom.
pågår
Inaktivering av indexen har startats men är inte slutfört.
Framgång
Avaktiveringsåtgärden har slutförts.
Fel
Ett fel uppstod under indexavaktiveringsåtgärden och åtgärden slutfördes inte.
har stoppats
Det gick inte att slutföra indexets inaktivering eftersom användaren stoppade åtgärden.
Meddelande
Innehåller text för felmeddelanden under inaktiveringsåtgärden. Under körningen visas fel som hyperlänkar. Texten i hyperlänkarna beskriver felets brödtext. Kolumnen Message är sällan tillräckligt bred för att läsa den fullständiga meddelandetexten. Det finns två sätt att hämta den fullständiga texten:
- Flytta muspekaren över meddelandecellen för att visa en knappbeskrivning med feltexten.
- Välj hyperlänken för att visa en dialogruta som visar det fullständiga felet.
Använd 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.
Inaktivera ett index
I Object Exploreransluter du till en instans av databasmotorn.
I standardfältet väljer du Ny fråga.
Kopiera och klistra in följande exempel i frågefönstret och välj Kör. Det här exemplet inaktiverar
IX_Employee_OrganizationLevel_OrganizationNode
index i tabellenHumanResources.Employee
.USE AdventureWorks2022; GO ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee DISABLE;
Inaktivera alla index i en tabell
I Object Exploreransluter du till en instans av databasmotorn.
I standardfältet väljer du Ny fråga.
Kopiera och klistra in följande exempel i frågefönstret och välj Kör. Det här exemplet inaktiverar alla index i tabellen
HumanResources.Employee
.USE AdventureWorks2022; GO ALTER INDEX ALL ON HumanResources.Employee DISABLE;