Utföra indexåtgärder online
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 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.
- CREATE INDEX
- ALTER INDEX
- DROP INDEX
-
ALTER TABLE (Om du vill lägga till eller ta bort
UNIQUE
ellerPRIMARY KEY
begränsningar)
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
I Object Explorer expanderar du databasen som innehåller tabellen där du vill återskapa ett index online.
Öppna mappen Tables.
Expandera tabellen där du vill återskapa ett index online.
Expandera mappen Index.
Använd snabbmenyn för det index som du vill återskapa online och välj Egenskaper.
Under Välj en sida, välj Alternativ.
Välj Tillåt DML-bearbetning onlineoch välj sedan True i listan.
Välj OK.
Använd snabbmenyn för det index som du vill återskapa online och välj Återskapa.
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.tables
och 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).