Spostare un indice esistente in un filegroup diverso

Si applica a:SQL ServerIstanza gestita di SQL di Azure

In questo argomento viene descritta la procedura per spostare un indice esistente dal relativo filegroup corrente in un filegroup diverso in SQL Server tramite SQL Server Management Studio o Transact-SQL.

Per considerazioni sulla progettazione, tra cui il motivo per cui potrebbe essere necessario inserire un indice non cluster in un filegroup diverso, vedere Posizionamento degli indici in filegroup o schemi di partizioni.

Operazioni preliminari

Limitazioni e restrizioni

  • Se una tabella presenta un indice cluster, lo spostamento di tale indice in un nuovo filegroup causa lo spostamento della tabella in tale filegroup.

  • Non è possibile spostare gli indici creati utilizzando un vincolo UNIQUE o PRIMARY KEY tramite Management Studio. Per spostare questi indici, usare l'istruzione CREATE INDEX con l'opzione DROP_EXISTING=ON in Transact-SQL.

Sicurezza

Autorizzazioni

È richiesta l'autorizzazione ALTER per la tabella o la vista. L'utente deve essere un membro del ruolo predefinito del server sysadmin o dei ruoli predefiniti del database db_ddladmin e db_owner .

Usare SQL Server Management Studio

Per spostare un indice esistente in un filegroup diverso tramite Progettazione tabelle

  1. In Esplora oggetti fare clic sul segno più per espandere il database contenente la tabella che contiene l'indice da spostare.

  2. Fare clic sul segno più per espandere la cartella Tabelle .

  3. Fare clic con il pulsante destro del mouse sulla tabella contenente l'indice da spostare e selezionare Progetta.

  4. Scegliere Indici/chiavi nel menu Progettazione tabelle.

  5. Selezionare l'indice che si desidera spostare.

  6. Nella griglia principale espandere Specifica spazio dei dati.

  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.

  8. Fare clic su Close.

  9. Selezionare Salva table_name dal menuFile.

Per spostare un indice esistente in un filegroup diverso in Esplora oggetti

  1. In Esplora oggetti fare clic sul segno più per espandere il database contenente la tabella che contiene l'indice da spostare.

  2. Fare clic sul segno più per espandere la cartella Tabelle .

  3. Fare clic sul segno più per espandere la tabella contenente l'indice da spostare.

  4. Fare clic sul segno più per espandere la cartella Indici .

  5. Fare clic con il pulsante destro del mouse sull'indice da spostare e selezionare Proprietà.

  6. In Selezione paginaselezionare Archiviazione.

  7. Selezionare il filegroup in cui si desidera spostare l'indice.

    Se la tabella o l'indice è partizionato, selezionare lo schema di partizione in cui si desidera spostare l'indice. Per ulteriori informazioni sugli indici partizionati, vedere Partitioned Tables and Indexes.

    Per spostare un indice cluster, è possibile utilizzare l'elaborazione online. L'elaborazione online consente l'accesso simultaneo degli utenti ai dati sottostanti e agli indici non cluster durante l'operazione sull'indice. Per altre informazioni, vedere Perform Index Operations Online.

    Nei computer multiprocessore che utilizzano è possibile configurare il numero di processori utilizzati per l'esecuzione dell'istruzione dell'indice specificando il valore massimo per il grado di parallelismo. Le operazioni parallele sugli indici non sono disponibili in tutte le edizioni di SQL Server. Per un elenco delle funzionalità supportate dalle edizioni di SQL Server, vedere Funzionalità supportate dalle edizioni di SQL Server 2016. Per altre informazioni sulle operazioni parallele sugli indici, vedere Configurazione di operazioni parallele sugli indici.

  8. Fare clic su OK.

Le informazioni seguenti sono disponibili nella pagina Archiviazione della finestra di dialogo Proprietà indice -nome_indice:

Filegroup
Archivia l'indice nel filegroup specificato. Nell'elenco sono visualizzati solo filegroup standard (ROW). La selezione predefinita nell'elenco è il filegroup PRIMARY del database.

Filegroup FILESTREAM
Specifica il filegroup per i dati FILESTREAM. Questo elenco visualizza solo i filegroup FILESTREAM. La selezione predefinita nell'elenco è il filegroup PRIMARY FILESTREAM del database.

Schema di partizione
Archivia l'indice in uno schema di partizione. Facendo clic su Schema partizione si abilita la griglia sottostante. La selezione predefinita nell'elenco è lo schema di partizione usato per archiviare i dati di tabella. Selezionando uno schema di partizione diverso nell'elenco si aggiornano le informazioni visualizzate nella griglia.

L'opzione relativa allo schema di partizione non è disponibile se il database non contiene schemi di partizione.

Schema di partizione FILESTREAM
Specifica lo schema di partizione per i dati FILESTREAM. Lo schema di partizione deve essere simmetrico con la combinazione specificata nell'opzione Schema partizione .

Se la tabella non è partizionata, il campo è vuoto.

Parametro schema partizione
Consente di visualizzare il nome della colonna che partecipa allo schema di partizione.

Colonne della tabella
Consente di selezionare la tabella o la vista su cui eseguire il mapping allo schema di partizione.

Tipo di dati colonna
Consente di visualizzare le informazioni sul tipo di dati relative alla colonna.

Nota

Se la colonna della tabella è una colonna calcolata, l'opzione Tipo di dati colonna visualizza "colonna calcolata".

Consenti elaborazione online di istruzioni DML durante lo spostamento dell'indice
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.

Nota

Questa opzione non è disponibile per gli indici XML o se l'indice è un indice cluster disabilitato.

Imposta massimo grado di parallelismo
Consente di limitare il numero di processori da usare durante l'esecuzione di piani paralleli. Il valore predefinito è 0 e corrisponde al numero effettivo di CPU disponibili. 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. Questa opzione diventa disponibile solo se la finestra di dialogo è nello stato Ricompila o Ricrea .

Nota

Se viene specificato un valore maggiore del numero di CPU disponibili, verrà usato l'effettivo numero di CPU disponibili.

Utilizzo di Transact-SQL

Per spostare un indice esistente in un filegroup diverso

  1. In Esplora oggetti connettersi a un'istanza del motore di database.

  2. Sulla barra Standard fare clic su Nuova query.

  3. Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su Esegui.

    USE AdventureWorks2022;  
    GO  
    -- Creates the TransactionsFG1 filegroup on the AdventureWorks2022 database  
    ALTER DATABASE AdventureWorks2022  
    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 AdventureWorks2022   
    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  
    

Passaggi successivi

Per altre informazioni, vedere CREATE INDEX (Transact-SQL).

Architettura e guida per la progettazione degli indici di SQL Server