Dela via


Utföra indexåtgärder online

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Den här artikeln beskriver hur du skapar, återskapar eller släpper index online med SQL Server Management Studio eller Transact-SQL. Alternativet ONLINE tillåter samtidig användaråtkomst till den underliggande tabellen eller klustrade indexdata och eventuella associerade icke-grupperade index under dessa indexåtgärder. Medan ett klustrat index till exempel återskapas av en användare kan användaren och andra fortsätta att uppdatera och köra frågor mot underliggande data.

När du utför åtgärder för datadefinitionsspråk (DDL) offline, till exempel när du skapar eller återskapar ett grupperat index, låser dessa åtgärder exklusivt (X) underliggande data och associerade index. Detta förhindrar ändringar och frågor till underliggande data tills indexåtgärden har slutförts.

Notera

Kommandon för återskapande av index kan komma att hålla exklusiva lås på klustrade index efter att en stor objektkolumn har tagits bort från en tabell, även när de utförs i onlineläge.

Alternativet ONLINE är tillgängligt i följande Transact-SQL-instruktioner.

Begränsningar och begränsningar för att skapa, återskapa eller ta bort index online finns i Riktlinjer för onlineindexåtgärder.

Om du vill använda återupptabara indexåtgärder måste en indexåtgärd utföras online. Mer information finns i Indexöverväganden som kan återupptas.

Plattformar som stöds

Onlineindexåtgärder är inte tillgängliga i varje version av SQL Server. Mer information finns i -utgåvor och funktioner som stöds i SQL Server 2022.

Onlineindexåtgärder är tillgängliga i Azure SQL Database och Azure SQL Managed Instance.

Behörigheter

Kräver ALTER-behörighet på den tabellen eller vyn.

Använda SQL Server Management Studio

  1. I Object Explorer expanderar du databasen som innehåller tabellen där du vill återskapa ett index online.

  2. Öppna mappen Tables.

  3. Expandera tabellen där du vill återskapa ett index online.

  4. Expandera mappen Index.

  5. Använd snabbmenyn för det index som du vill återskapa online och välj Egenskaper.

  6. Under Välj en sida, välj Alternativ.

  7. Välj Tillåt DML-bearbetning onlineoch välj sedan True i listan.

  8. Välj OK.

  9. Använd snabbmenyn för det index som du vill återskapa online och välj Återskapa.

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

Använd Transact-SQL

I följande exempel återskapas ett befintligt onlineindex i AdventureWorks exempeldatabas.

ALTER INDEX AK_Employee_NationalIDNumber
    ON HumanResources.Employee
    REBUILD WITH (ONLINE = ON);

I följande exempel tas ett grupperat index bort online och den resulterande tabellen (heap) flyttas till filgruppens NewGroup med hjälp av MOVE TO-satsen. Katalogvyerna sys.indexes, sys.tablesoch sys.filegroups efterfrågas för att verifiera index- och tabellplaceringen i filgrupperna före och efter flytten.

-- Create a clustered index on the PRIMARY filegroup if the index does not exist.
IF NOT EXISTS (SELECT name FROM sys.indexes WHERE name = 
            N'AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate')
    CREATE UNIQUE CLUSTERED INDEX
        AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate 
    ON Production.BillOfMaterials (ProductAssemblyID, ComponentID, 
        StartDate)
    ON 'PRIMARY';
GO

-- Verify filegroup location of the clustered index.
SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,
    i.data_space_id, f.name AS [Filegroup Name]
FROM sys.indexes AS i
    JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id
    JOIN sys.tables as t ON i.object_id = t.object_id
        AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U')
GO

-- Create filegroup NewGroup if it does not exist.
IF NOT EXISTS (SELECT name FROM sys.filegroups
                WHERE name = N'NewGroup')
    BEGIN
    ALTER DATABASE AdventureWorks2022
        ADD FILEGROUP NewGroup;
    ALTER DATABASE AdventureWorks2022
        ADD FILE (NAME = File1,
            FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\File1.ndf')
        TO FILEGROUP NewGroup;
    END
GO

-- Verify new filegroup
SELECT * from sys.filegroups;
GO

-- Drop the clustered index and move the BillOfMaterials table to
-- the Newgroup filegroup.
-- Set ONLINE = OFF to execute this example on editions other than Enterprise Edition.
DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate 
    ON Production.BillOfMaterials 
    WITH (ONLINE = ON, MOVE TO NewGroup);
GO

-- Verify filegroup location of the moved table.
SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,
    i.data_space_id, f.name AS [Filegroup Name]
FROM sys.indexes AS i
    JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id
    JOIN sys.tables as t ON i.object_id = t.object_id
        AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U');

Mer information finns i ALTER INDEX (Transact-SQL).