Dela via


Inaktivera index och begränsningar

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-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 INDEXkrävs minst ALTER behörighet på tabellen eller vyn.

Använda SQL Server Management Studio

Inaktivera ett index

  1. I Object Explorer väljer du plustecknet för att expandera databasen som innehåller tabellen där du vill inaktivera 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 inaktivera ett index.

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

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

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

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

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

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

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

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

  1. I Object Exploreransluter du till en instans av databasmotorn.

  2. I standardfältet väljer du Ny fråga.

  3. 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 tabellen HumanResources.Employee.

    USE AdventureWorks2022;
    GO
    
    ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode
        ON HumanResources.Employee
    DISABLE;
    

Inaktivera alla index i en tabell

  1. I Object Exploreransluter du till en instans av databasmotorn.

  2. I standardfältet väljer du Ny fråga.

  3. 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;