Delen via


Indexbewerkingen online uitvoeren

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

In dit artikel wordt beschreven hoe u online indexen kunt maken, herbouwen of verwijderen met SQL Server Management Studio of Transact-SQL. Met de optie ONLINE kunnen gelijktijdige gebruikers toegang krijgen tot de onderliggende tabel- of geclusterde indexgegevens en eventuele gekoppelde niet-geclusterde indexen tijdens deze indexbewerkingen. Terwijl een geclusterde index bijvoorbeeld opnieuw wordt opgebouwd door één gebruiker, kunnen die gebruiker en anderen de onderliggende gegevens blijven bijwerken en er query's op uitvoeren.

Wanneer u DDL-bewerkingen (Data Definition Language) offline uitvoert, zoals het bouwen of herbouwen van een geclusterde index, bevatten deze bewerkingen exclusieve (X) vergrendelingen op de onderliggende gegevens en bijbehorende indexen. Hiermee voorkomt u wijzigingen en query's in de onderliggende gegevens totdat de indexbewerking is voltooid.

Notitie

Opdrachten voor het opnieuw samenstellen van indexen kunnen exclusieve vergrendelingen bevatten voor geclusterde indexen nadat een grote objectkolom uit een tabel is verwijderd, zelfs wanneer deze online worden uitgevoerd.

De optie ONLINE is beschikbaar in de volgende Transact-SQL instructies.

Zie Richtlijnen voor online indexbewerkingenvoor beperkingen en beperkingen voor het online maken, herbouwen of verwijderen van indexen.

Als u hervatbare indexbewerkingen wilt gebruiken, moet een indexbewerking online worden uitgevoerd. Zie Hervatbare indexoverwegingenvoor meer informatie.

Ondersteunde platforms

Online indexbewerkingen zijn niet beschikbaar in elke editie van SQL Server. Zie Edities en ondersteunde functies van SQL Server 2022voor meer informatie.

Online indexbewerkingen zijn beschikbaar in Azure SQL Database en Azure SQL Managed Instance.

Machtigingen

Hiervoor is de machtiging ALTER voor de tabel of weergave vereist.

SQL Server Management Studio gebruiken

  1. Vouw in Objectverkenner de database uit die de tabel bevat waarop u een index online wilt herbouwen.

  2. Vouw de map Tabellen uit.

  3. Vouw de tabel uit waarop u een index online wilt herbouwen.

  4. Vouw de map Indexen uit.

  5. Gebruik het contextmenu voor de index die u online wilt herbouwen en selecteer Eigenschappen.

  6. Onder Een pagina selecteren, selecteer Opties.

  7. Selecteer Online DML-verwerkingtoestaan en selecteer vervolgens True in de lijst.

  8. Selecteer OK-.

  9. Gebruik het contextmenu voor de index die u online wilt herbouwen en selecteer opnieuw opbouwen.

  10. Controleer in het dialoogvenster Indexen opnieuw opbouwen of de juiste index zich in de Indexen bevindt om raster opnieuw te bouwen en OK-te selecteren.

Gebruik Transact-SQL

In het volgende voorbeeld wordt een bestaande onlineindex opnieuw opgebouwd in de AdventureWorks voorbeelddatabase.

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

In het volgende voorbeeld wordt een geclusterde index online verwijderd en wordt de resulterende tabel (heap) verplaatst naar de bestandsgroep NewGroup met behulp van de MOVE TO-component. De sys.indexes-, sys.tables- en sys.filegroups catalogusweergaven worden opgevraagd om de plaatsing van de index en tabel in de bestandsgroepen vóór en na de verplaatsing te controleren.

-- 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');

Zie ALTER INDEX (Transact-SQL)voor meer informatie.