Eseguire operazioni online sugli indiciPerform Index Operations Online

In questo argomento si applica a: SìSQL ServerSìDatabase SQL di AzurenonAzure SQL Data Warehouse non Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

In questo argomento si illustra come creare, ricompilare o eliminare gli indici online in SQL Server 2017SQL Server 2017 tramite SQL Server Management StudioSQL Server Management Studio o Transact-SQLTransact-SQL.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. L'opzione ONLINE consente l'accesso simultaneo degli utenti alla tabella sottostante o ai dati dell'indice cluster e a qualsiasi indice non cluster associato durante l'esecuzione di queste operazioni sugli indici.The ONLINE option allows concurrent user access to the underlying table or clustered index data and any associated nonclustered indexes during these index operations. Durante la ricompilazione di un indice cluster da parte di un utente, ad esempio, tale utente e altri utenti possono continuare ad aggiornare ed eseguire query sui dati sottostanti.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. Quando si eseguono operazioni DDL (Data Definition Language) offline, ad esempio la compilazione o la ricompilazione di un indice cluster, tali operazioni mantengono blocchi esclusivi sui dati sottostanti e gli indici associati.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. Questo comportamento impedisce modifiche e query nei dati sottostanti fino al termine dell'operazione sull'indice.This prevents modifications and queries to the underlying data until the index operation is complete.

Nota

Le operazioni sugli indici online sono disponibili solo in alcune edizioni di SQL ServerSQL Server .Online index operations are not available in every SQL ServerSQL Server edition. Per altre informazioni, vedere Funzionalità supportate dalle edizioni di SQL Server 2016.For more information, see Features Supported by the Editions of SQL Server 2016.

Contenuto dell'argomentoIn This Topic

Prima di iniziareBefore You Begin

Limitazioni e restrizioniLimitations and Restrictions

  • È consigliabile eseguire operazioni online sugli indici per ambiti aziendali in funzione 24 ore al giorno e sette giorni su sette, in cui l'esigenza di attività simultanee durante le operazioni sugli indici rappresenta un elemento essenziale.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.

  • L'opzione ONLINE è disponibile nelle istruzioni Transact-SQLTransact-SQL seguenti.The ONLINE option is available in the following Transact-SQLTransact-SQL statements.

  • Per altre limitazioni e restrizioni relative alla creazione, alla ricompilazione o all'eliminazione degli indici online, vedere Linee guida per le operazioni di indice online.For more limitations and restrictions concerning creating, rebuilding, or dropping indexes online, see Guidelines for Online Index Operations.

SicurezzaSecurity

AutorizzazioniPermissions

È richiesta l'autorizzazione ALTER per la tabella o la vista.Requires ALTER permission on the table or view.

Utilizzo di SQL Server Management StudioUsing SQL Server Management Studio

Per ricompilare un indice onlineTo rebuild an index online

  1. In Esplora oggetti fare clic sul segno più per espandere il database contenente la tabella in cui si desidera ricompilare un indice online.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. Espandere la cartella Tabelle .Expand the Tables folder.

  3. Fare clic sul segno più per espandere la tabella in cui si desidera ricompilare un indice online.Click the plus sign to expand the table on which you want to rebuild an index online.

  4. Espandere la cartella Indici .Expand the Indexes folder.

  5. Fare clic con il pulsante destro del mouse sull'indice da ricompilare online e selezionare Proprietà.Right-click the index that you want to rebuild online and select Properties.

  6. In Selezione paginaselezionare Opzioni.Under Select a page, select Options.

  7. Selezionare Consenti elaborazione DML online, quindi selezionare True dall'elenco.Select Allow online DML processing, and then select True from the list.

  8. Scegliere OK.Click OK.

  9. Fare clic con il pulsante destro del mouse sull'indice da ricompilare online e selezionare Ricompila.Right-click the index that you want to rebuild online and select Rebuild.

  10. Nella finestra di dialogo Ricompila indici verificare che nella griglia Indici da ricompilare sia presente l'indice corretto e fare clic su OK.In the Rebuild Indexes dialog box, verify that the correct index is in the Indexes to rebuild grid and click OK.

Utilizzo di Transact-SQLUsing Transact-SQL

Per creare, ricompilare o eliminare un indice onlineTo create, rebuild, or drop an index online

  1. In Esplora oggetticonnettersi a un'istanza del Motore di databaseDatabase Engine.In Object Explorer, connect to an instance of Motore di databaseDatabase Engine.

  2. Sulla barra Standard fare clic su Nuova query.On the Standard bar, click New Query.

  3. Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su Esegui.Copy and paste the following example into the query window and click Execute. Nell'esempio viene ricompilato un indice online esistenteThe example rebuilds an existing online

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

    Nell'esempio seguente viene eliminato un indice cluster online e la tabella risultante (heap) viene spostata nel filegroup NewGroup tramite la clausola MOVE TO .The following example deletes a clustered index online and moves the resulting table (heap) to the filegroup NewGroup by using the MOVE TO clause. Vengono eseguite query sulle viste del catalogo sys.indexes, sys.tablese sys.filegroups per verificare la posizione dell'indice e della tabella nei filegroup prima e dopo lo spostamento.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.

    USE AdventureWorks2012;
    GO
    --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');
    GO
    

    Per altre informazioni, vedere ALTER INDEX (Transact-SQL).For more information, see ALTER INDEX (Transact-SQL).