Online provádění operací indexu
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL Database v rámci Microsoft Fabric
Tento článek popisuje, jak vytvořit, znovu sestavit nebo odstranit indexy online pomocí aplikace SQL Server Management Studio nebo Transact-SQL. Možnost ONLINE
umožňuje souběžným uživatelům přístup k podkladovým tabulkovým nebo clusterovaným indexům a všem přidruženým neclusterovaným indexům během těchto operací indexu. Například když je clusterovaný index znovu sestavován jedním uživatelem, může tento uživatel a ostatní pokračovat v aktualizaci a dotazování podkladových dat.
Při offline provádění operací jazyka DDL (Data Definition Language), jako je sestavení nebo opětovné sestavení clusterovaného indexu, tyto operace drží výhradní (X
) zámky na podkladových datech a přidružených indexech. Tím se zabrání úpravám a dotazům na podkladová data, dokud se operace indexu neskoní.
Poznámka
Příkazy opětovného sestavení indexu můžou po vyřazení velkého sloupce objektu z tabulky obsahovat výhradní zámky na clusterovaných indexech, i když se provádí online.
Možnost ONLINE
je dostupná v následujících příkazech Transact-SQL.
- CREATE INDEX
- ALTER INDEX
- DROP INDEX
-
ALTER TABLE (přidání nebo odstranění omezení
UNIQUE
neboPRIMARY KEY
)
Omezení a omezení týkající se vytváření, opětovného sestavení nebo vyřazení indexů online najdete v tématu Pokyny pro online indexovací operace.
Chcete-li použít obnovitelné indexovací operace, musí být operace indexu provedena online. Další informace najdete v tématu úvahy o obnovitelných indexech.
Podporované platformy
Online indexovací operace nejsou dostupné v každé edici SQL Serveru. Další informace naleznete v tématu Edice a podporované funkce SQL Server 2022.
Online indexovací operace jsou k dispozici ve službě Azure SQL Database a ve službě Azure SQL Managed Instance.
Dovolení
Vyžaduje oprávnění ALTER
v tabulce nebo zobrazení.
Použití aplikace SQL Server Management Studio
V Průzkumníku objektů rozbalte databázi obsahující tabulku, na které chcete znovu sestavit index online.
Rozbalte složku Tabulky.
Rozbalte tabulku, na které chcete znovu sestavit index online.
Rozbalte složku Indexy.
Použijte místní nabídku indexu, který chcete znovu sestavit online, a vyberte Vlastnosti.
Pod Vyberte stránku, vyberte Možnosti.
Vyberte Povolit online zpracování DMLa pak v seznamu vyberte True.
Vyberte OK.
Použijte místní nabídku indexu, který chcete online znovu sestavit, a vyberte Znovu sestavit.
V dialogovém okně Znovu sestavit indexy ověřte, zda je správný index v mřížce Indexy ke znovu sestavení a klikněte na OK.
Použijte Transact-SQL
Následující příklad znovu sestaví existující online index v ukázkové databázi AdventureWorks
.
ALTER INDEX AK_Employee_NationalIDNumber
ON HumanResources.Employee
REBUILD WITH (ONLINE = ON);
Následující příklad odstraní clusterovaný index online a přesune výslednou tabulku (haldu) do skupiny souborů NewGroup
pomocí klauzule MOVE TO
. Katalogová zobrazení sys.indexes
, sys.tables
a sys.filegroups
jsou dotazována ke kontrole umístění indexu a tabulky ve skupinách souborů před a po přesunu.
-- 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');
Další informace naleznete v tématu ALTER INDEX (Transact-SQL).