Ausführen von OnlineindexvorgängenPerform Index Operations Online

GILT FÜR: jaSQL ServerjaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

In diesem Thema wird beschrieben, wie Sie Indizes in SQL Server 2017SQL Server 2017 mithilfe von SQL Server Management StudioSQL Server Management Studio oder Transact-SQLTransact-SQLonline erstellen, neu erstellen oder löschen.This topic describes how to create, rebuild, or drop indexes online in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. Die ONLINE-Option ermöglicht, dass Benutzer während dieser Indexvorgänge gleichzeitig auf die dem Index zugrunde liegende Tabelle oder auf Daten eines gruppierten Indexes sowie auf alle eventuell damit verbundenen nicht gruppierten Indizes zugreifen können.The ONLINE option allows concurrent user access to the underlying table or clustered index data and any associated nonclustered indexes during these index operations. Während beispielsweise ein gruppierter Index von einem Benutzer neu erstellt wird, kann dieser Benutzer – und alle anderen Benutzer – weiterhin die dem Index zugrunde liegenden Daten aktualisieren oder abfragen.For example, while a clustered index is being rebuilt by one user, that user and others can continue to update and query the underlying data. Wenn Sie DDL-Vorgänge (Datendefinitionssprache) wie das Erstellen oder Neuerstellen eines gruppierten Indexes offline ausführen, richten diese Vorgänge exklusive Sperren für die dem Index zugrunde liegenden Daten und damit verbundene Indizes ein.When you perform data definition language (DDL) operations offline, such as building or rebuilding a clustered index; these operations hold exclusive locks on the underlying data and associated indexes. Damit werden Änderungen und Abfragen der zugrunde liegenden Daten verhindert, bis der Indexvorgang abgeschlossen ist.This prevents modifications and queries to the underlying data until the index operation is complete.

Hinweis

Onlineindexvorgänge sind nicht in jeder Edition von SQL ServerSQL Server verfügbar.Online index operations are not available in every SQL ServerSQL Server edition. Weitere Informationen finden Sie unter „Von den SQL Server 2016-Editionen unterstützte Funktionen“.For more information, see Features Supported by the Editions of SQL Server 2016.

In diesem ThemaIn This Topic

VorbereitungenBefore You Begin

EinschränkungenLimitations and Restrictions

  • Onlineindexvorgänge werden in Geschäftsumgebungen empfohlen, die rund um die Uhr und 7 Tage die Woche aktiv sind, für die also eine gleichzeitige Benutzeraktivität während Indexvorgängen unabdingbar ist.We recommend performing online index operations for business environments that operate 24 hours a day, seven days a week, in which the need for concurrent user activity during index operations is vital.

  • Die ONLINE-Option ist in folgenden Transact-SQLTransact-SQL -Anweisungen verfügbar:The ONLINE option is available in the following Transact-SQLTransact-SQL statements.

  • Weitere Einschränkungen und Einschränkungen im Zusammenhang mit der Onlineerstellung, -neuerstellung und -löschung von Indizes finden Sie unter Richtlinien für Onlineindexvorgänge.For more limitations and restrictions concerning creating, rebuilding, or dropping indexes online, see Guidelines for Online Index Operations.

SicherheitSecurity

BerechtigungenPermissions

Erfordert die ALTER-Berechtigung in der Tabelle oder Sicht.Requires ALTER permission on the table or view.

Verwenden von SQL Server Management StudioUsing SQL Server Management Studio

Sie erstellen Sie einen Index online neuTo rebuild an index online

  1. Klicken Sie im Objekt-Explorer auf das Pluszeichen, um die Datenbank mit der Tabelle zu erweitern, in der Sie einen Index online neu erstellen möchten.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to rebuild an index online.

  2. Erweitern Sie den Ordner Tabellen .Expand the Tables folder.

  3. Klicken Sie auf das Pluszeichen, um die Tabelle zu erweitern, für die Sie einen Index online neu erstellen möchten.Click the plus sign to expand the table on which you want to rebuild an index online.

  4. Erweitern Sie den Ordner Indizes .Expand the Indexes folder.

  5. Klicken Sie mit der rechten Maustaste auf den Index, den Sie online neu erstellen möchten, und wählen Sie Eigenschaftenaus.Right-click the index that you want to rebuild online and select Properties.

  6. Wählen Sie unter Seite auswählendie Option Optionenaus.Under Select a page, select Options.

  7. Wählen Sie DML-Onlineverarbeitung zulassenaus, und wählen Sie dann in der Liste True aus.Select Allow online DML processing, and then select True from the list.

  8. Klicken Sie auf OK.Click OK.

  9. Klicken Sie mit der rechten Maustaste auf den Index, den Sie online neu erstellen möchten, und wählen Sie Neu erstellenaus.Right-click the index that you want to rebuild online and select Rebuild.

  10. Überprüfen Sie im Dialogfeld Indizes neu erstellen , dass der richtige Index im Raster Neu zu erstellende Indizes ausgewählt ist, und klicken sie auf OK.In the Rebuild Indexes dialog box, verify that the correct index is in the Indexes to rebuild grid and click OK.

Verwenden von Transact-SQLUsing Transact-SQL

So können Sie einen Index online erstellen, neu erstellen oder löschenTo create, rebuild, or drop an index online

Im folgenden Beispiel wird ein vorhandener Onlineindex in der AdventureWorks-Datenbank erneut erstellt.The following example rebuilds an existing online index in the AdventureWorks database.

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

Im folgenden Beispiel wird ein gruppierter Index online gelöscht, und die daraus resultierende Tabelle (Heap) wird in die Dateigruppe NewGroup verschoben, wofür die MOVE TO -Klausel verwendet wird.The following example deletes a clustered index online and moves the resulting table (heap) to the filegroup NewGroup by using the MOVE TO clause. Die Katalogsichten sys.indexes, sys.tablesund sys.filegroups werden abgefragt, um die Platzierung von Index und Tabelle in den Dateigruppen vor und nach der Verschiebung zu prüfen.The sys.indexes, sys.tables, and sys.filegroups catalog views are queried to verify the index and table placement in the filegroups before and after the move.

--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 AdventureWorks2012
        ADD FILEGROUP NewGroup;
    ALTER DATABASE AdventureWorks2012
        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');

Weitere Informationen finden Sie unter ALTER INDEX (Transact-SQL).For more information, see ALTER INDEX (Transact-SQL).