Indexbewerkingen online uitvoeren
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-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.
- CREATE INDEX
- ALTER INDEX
- DROP INDEX
-
ALTER TABLE (toevoegen of verwijderen van
UNIQUE
ofPRIMARY KEY
beperkingen)
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
Vouw in Objectverkenner de database uit die de tabel bevat waarop u een index online wilt herbouwen.
Vouw de map Tabellen uit.
Vouw de tabel uit waarop u een index online wilt herbouwen.
Vouw de map Indexen uit.
Gebruik het contextmenu voor de index die u online wilt herbouwen en selecteer Eigenschappen.
Onder Een pagina selecteren, selecteer Opties.
Selecteer Online DML-verwerkingtoestaan en selecteer vervolgens True in de lijst.
Selecteer OK-.
Gebruik het contextmenu voor de index die u online wilt herbouwen en selecteer opnieuw opbouwen.
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.