Spostare un indice esistente in un filegroup diversoMove an Existing Index to a Different Filegroup

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2016)noDatabase SQL di AzurenoAzure SQL Data WarehousenoParallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

In questo argomento viene descritta la procedura per spostare un indice esistente dal relativo filegroup corrente in un filegroup diverso in SQL Server 2017SQL Server 2017 tramite SQL Server Management StudioSQL Server Management Studio o Transact-SQLTransact-SQL.This topic describes how to move an existing index from its current filegroup to a different filegroup in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL.

Contenuto dell'argomentoIn This Topic

Prima di iniziare Before You Begin

Limitazioni e restrizioni Limitations and Restrictions

  • Se una tabella presenta un indice cluster, lo spostamento di tale indice in un nuovo filegroup causa lo spostamento della tabella in tale filegroup.If a table has a clustered index, moving the clustered index to a new filegroup moves the table to that filegroup.

  • Non è possibile spostare gli indici creati utilizzando un vincolo UNIQUE o PRIMARY KEY tramite Management StudioManagement Studio.You cannot move indexes created using a UNIQUE or PRIMARY KEY constraint using Management StudioManagement Studio. Per spostare questi indici, usare l'istruzione CREATE INDEX con l'opzione DROP_EXISTING=ON in Transact-SQLTransact-SQL.To move these indexes use the CREATE INDEX statement with the (DROP_EXISTING=ON) option in Transact-SQLTransact-SQL.

Sicurezza Security

Autorizzazioni Permissions

È richiesta l'autorizzazione ALTER per la tabella o la vista.Requires ALTER permission on the table or view. L'utente deve essere un membro del ruolo predefinito del server sysadmin o dei ruoli predefiniti del database db_ddladmin e db_owner .User must be a member of the sysadmin fixed server role or the db_ddladmin and db_owner fixed database roles.

Utilizzo di SQL Server Management Studio Using SQL Server Management Studio

Per spostare un indice esistente in un filegroup diverso tramite Progettazione tabelleTo move an existing index to a different filegroup using Table Designer

  1. In Esplora oggetti fare clic sul segno più per espandere il database contenente la tabella che contiene l'indice da spostare.In Object Explorer, click the plus sign to expand the database that contains the table containing the index that you want to move.

  2. Fare clic sul segno più per espandere la cartella Tabelle .Click the plus sign to expand the Tables folder.

  3. Fare clic con il pulsante destro del mouse sulla tabella contenente l'indice da spostare e selezionare Progetta.Right-click the table containing the index that you want to move and select Design.

  4. Scegliere Indici/chiavi nel menu Progettazione tabelle.On the Table Designer menu, click Indexes/Keys.

  5. Selezionare l'indice che si desidera spostare.Select the index that you want to move.

  6. Nella griglia principale espandere Specifica spazio dei dati.In the main grid, expand Data Space Specification.

  7. Selezionare Nome filegroup o schema di partizione e selezionare dall'elenco il filegroup o lo schema di partizione in cui si desidera spostare l'indice.Select Filegroup or Partition Scheme Name and select from the list the filegroup or partition scheme to where you want to move the index.

  8. Scegliere Chiudi.Click Close.

  9. Selezionare Salva nome_tabella dal menuFile.On the File menu, select Savetable_name.

Per spostare un indice esistente in un filegroup diverso in Esplora oggettiTo move an existing index to a different filegroup in Object Explorer

  1. In Esplora oggetti fare clic sul segno più per espandere il database contenente la tabella che contiene l'indice da spostare.In Object Explorer, click the plus sign to expand the database that contains the table containing the index that you want to move.

  2. Fare clic sul segno più per espandere la cartella Tabelle .Click the plus sign to expand the Tables folder.

  3. Fare clic sul segno più per espandere la tabella contenente l'indice da spostare.Click the plus sign to expand the table containing the index that you want to move.

  4. Fare clic sul segno più per espandere la cartella Indici .Click the plus sign to expand the Indexes folder.

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

  6. In Selezione paginaselezionare Archiviazione.Under Select a page, select Storage.

  7. Selezionare il filegroup in cui si desidera spostare l'indice.Select the filegroup in which to move the index.

    Se la tabella o l'indice è partizionato, selezionare lo schema di partizione in cui si desidera spostare l'indice.If the table or index is partitioned, select the partition scheme in which to move the index. Per ulteriori informazioni sugli indici partizionati, vedere Partitioned Tables and Indexes.For more information about partitioned indexes, see Partitioned Tables and Indexes.

    Per spostare un indice cluster, è possibile utilizzare l'elaborazione online.If you are moving a clustered index, you can use online processing. L'elaborazione online consente l'accesso simultaneo degli utenti ai dati sottostanti e agli indici non cluster durante l'operazione sull'indice.Online processing allows concurrent user access to the underlying data and to nonclustered indexes during the index operation. Per altre informazioni, vedere Perform Index Operations Online.For more information, see Perform Index Operations Online.

    Nei computer multiprocessore che utilizzano SQL Server 2017SQL Server 2017è possibile configurare il numero di processori utilizzati per l'esecuzione dell'istruzione dell'indice specificando il valore massimo per il grado di parallelismo.On multiprocessor computers using SQL Server 2017SQL Server 2017, you can configure the number of processors used to execute the index statement by specifying a maximum degree of parallelism value. La funzionalità Operazioni indicizzate parallele non è disponibile in tutte le edizioni di SQL ServerSQL Server.The Parallel indexed operations feature is not available in every edition of SQL ServerSQL Server. Per un elenco delle funzionalità supportate dalle edizioni di SQL ServerSQL Server, vedere Funzionalità supportate dalle edizioni di SQL Server 2016.For a list of features that are supported by the editions of SQL ServerSQL Server, see Features Supported by the Editions of SQL Server 2016. Per altre informazioni sulle operazioni indicizzate parallele, vedere Configurazione di operazioni parallele sugli indici.For more information about Parallel indexed operations, see Configure Parallel Index Operations.

  8. Scegliere OK.Click OK.

    Le informazioni seguenti sono disponibili nella pagina Archiviazione della finestra di dialogo Proprietà indice – nome_indice :The following information is available on the Storage page of the Index Properties – index_name dialog box:

    FilegroupFilegroup
    Archivia l'indice nel filegroup specificato.Stores the index in the specified filegroup. Nell'elenco sono visualizzati solo filegroup standard (ROW).The list only displays standard (row) filegroups. La selezione predefinita nell'elenco è il filegroup PRIMARY del database.The default list selection is the PRIMARY filegroup of the database.

    Filegroup FILESTREAMFilestream filegroup
    Specifica il filegroup per i dati FILESTREAM.Specifies the filegroup for FILESTREAM data. Questo elenco visualizza solo i filegroup FILESTREAM.This list displays only FILESTREAM filegroups. La selezione predefinita nell'elenco è il filegroup PRIMARY FILESTREAM del database.The default list selection is the PRIMARY FILESTREAM filegroup.

    Schema di partizionePartition scheme
    Archivia l'indice in uno schema di partizione.Stores the index in a partition scheme. Facendo clic su Schema partizione si abilita la griglia sottostante.Clicking Partition Scheme enables the grid below. La selezione predefinita nell'elenco è lo schema di partizione usato per archiviare i dati di tabella.The default list selection is the partition scheme that is used for storing the table data. Selezionando uno schema di partizione diverso nell'elenco si aggiornano le informazioni visualizzate nella griglia.When you select a different partition scheme in the list, the information in the grid is updated.

    L'opzione relativa allo schema di partizione non è disponibile se il database non contiene schemi di partizione.The partition scheme option is unavailable if there are no partition schemes in the database.

    Schema di partizione FILESTREAMFilestream partition scheme
    Specifica lo schema di partizione per i dati FILESTREAM.Specifies the partition scheme for FILESTREAM data. Lo schema di partizione deve essere simmetrico con la combinazione specificata nell'opzione Schema partizione .The partition scheme must be symmetric with the scheme that is specified in the Partition scheme option.

    Se la tabella non è partizionata, il campo è vuoto.If the table is not partitioned, the field is blank.

    Parametro schema partizionePartition Scheme Parameter
    Consente di visualizzare il nome della colonna che partecipa allo schema di partizione.Displays the name of the column that participates in the partition scheme.

    Colonne della tabellaTable Column
    Consente di selezionare la tabella o la vista su cui eseguire il mapping allo schema di partizione.Select the table or view to map to the partition scheme.

    Tipo di dati colonnaColumn Data Type
    Consente di visualizzare le informazioni sul tipo di dati relative alla colonna.Displays data type information about the column.

Nota

Se la colonna della tabella è una colonna calcolata, l'opzione Tipo di dati colonna visualizza "colonna calcolata".If the table column is a computed column, Column Data Type displays "computed column."

Consenti elaborazione online di istruzioni DML durante lo spostamento dell'indiceAllow online processing of DML statements while moving the index
Consente agli utenti di accedere ai dati della tabella o dell'indice cluster sottostanti e a eventuali indici non cluster associati durante l'operazione sull'indice.Allows users to access the underlying table or clustered index data and any associated nonclustered indexes during the index operation.

Nota

Questa opzione non è disponibile per gli indici XML o se l'indice è un indice cluster disabilitato.This option is not available for XML indexes, or if the index is a disabled clustered index.

Imposta massimo grado di parallelismoSet maximum degree of parallelism
Consente di limitare il numero di processori da usare durante l'esecuzione di piani paralleli.Limits the number of processors to use during parallel plan execution. Il valore predefinito è 0 e corrisponde al numero effettivo di CPU disponibili.The default value, 0, uses the actual number of available CPUs. L'impostazione del valore su 1 impedisce la generazione di piani paralleli. L'impostazione del valore su un numero maggiore di 1 limita il numero massimo di processori usati da una singola esecuzione della query.Setting the value to 1 suppresses parallel plan generation; setting the value to a number greater than 1 restricts the maximum number of processors used by a single query execution. Questa opzione diventa disponibile solo se la finestra di dialogo è nello stato Ricompila o Ricrea .This option only becomes available if the dialog box is in the Rebuild or Recreate state.

Nota

Se viene specificato un valore maggiore del numero di CPU disponibili, verrà usato l'effettivo numero di CPU disponibili.If a value greater than the number of available CPUs is specified, the actual number of available CPUs is used.

Utilizzo di Transact-SQL Using Transact-SQL

Per spostare un indice esistente in un filegroup diversoTo move an existing index to a different filegroup

  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.

    USE AdventureWorks2012;  
    GO  
    -- Creates the TransactionsFG1 filegroup on the AdventureWorks2012 database  
    ALTER DATABASE AdventureWorks2012  
    ADD FILEGROUP TransactionsFG1;  
    GO  
    /* Adds the TransactionsFG1dat3 file to the TransactionsFG1 filegroup. Please note that you will have to change the filename parameter in this statement to execute it without errors.  
    */  
    ALTER DATABASE AdventureWorks2012   
    ADD FILE   
    (  
        NAME = TransactionsFG1dat3,  
        FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL13\MSSQL\DATA\TransactionsFG1dat3.ndf',  
        SIZE = 5MB,  
        MAXSIZE = 100MB,  
        FILEGROWTH = 5MB  
    )  
    TO FILEGROUP TransactionsFG1;  
    GO  
    /*Creates the IX_Employee_OrganizationLevel_OrganizationNode index  
      on the TransactionsPS1 filegroup and drops the original IX_Employee_OrganizationLevel_OrganizationNode index.  
    */  
    CREATE NONCLUSTERED INDEX IX_Employee_OrganizationLevel_OrganizationNode  
        ON HumanResources.Employee (OrganizationLevel, OrganizationNode)  
        WITH (DROP_EXISTING = ON)  
        ON TransactionsFG1;  
    GO  
    

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