Abilitazione di indici e vincoliEnable Indexes and Constraints

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

In questo argomento si descrive come abilitare un indice disabilitato in SQL Server 2017SQL Server 2017 tramite SQL Server Management StudioSQL Server Management Studio o Transact-SQLTransact-SQL.This topic describes how to enable a disabled index in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. Dopo la disabilitazione, un indice rimane nello stato disabilitato finché non viene ricompilato o rimosso.After an index is disabled, it remains in a disabled state until it is rebuilt or dropped

Contenuto dell'argomentoIn This Topic

Prima di iniziare Before You Begin

Limitazioni e restrizioni Limitations and Restrictions

  • Dopo la ricompilazione dell'indice, sarà necessario abilitare manualmente tutti i vincoli disabilitati in seguito alla disabilitazione dell'indice.After rebuilding the index, any constraints that were disabled because of disabling the index must be manually enabled. Per abilitare i vincoli PRIMARY KEY e UNIQUE, è necessario ricompilare l'indice associato.PRIMARY KEY and UNIQUE constraints are enabled by rebuilding the associated index. Ricompilare e abilitare questo indice prima di abilitare i vincoli FOREIGN KEY che fanno riferimento al vincolo PRIMARY KEY o UNIQUE.This index must be rebuilt (enabled) before you can enable FOREIGN KEY constraints that reference the PRIMARY KEY or UNIQUE constraint. Per abilitare i vincoli FOREIGN KEY, utilizzare l'istruzione ALTER TABLE CHECK CONSTRAINT.FOREIGN KEY constraints are enabled by using the ALTER TABLE CHECK CONSTRAINT statement.

  • Non è possibile ricompilare un indice cluster disabilitato se l'opzione ONLINE è impostata su ON.Rebuilding a disabled clustered index cannot be performed when the ONLINE option is set to ON.

  • Se l'indice cluster è abilitato o disabilitato e l'indice non cluster è disabilitato, l'operazione sull'indice cluster ha l'effetto seguente sull'indice non cluster disabilitato.When the clustered index is disabled or enabled and the nonclustered index is disabled, the clustered index action has the following results on the disabled nonclustered index.

    Operazione sull'indice clusterClustered Index Action Indice non cluster disabilitatoDisabled Nonclustered Index …
    ALTER INDEX REBUILD.ALTER INDEX REBUILD. Rimane disabilitato.Remains disabled.
    ALTER INDEX ALL REBUILD.ALTER INDEX ALL REBUILD. Viene ricompilato e abilitato.Is rebuilt and enabled.
    DROP INDEX.DROP INDEX. Rimane disabilitato.Remains disabled.
    CREATE INDEX WITH DROP_EXISTING.CREATE INDEX WITH DROP_EXISTING. Rimane disabilitato.Remains disabled.

    La creazione di un nuovo indice cluster produce lo stesso risultato dell'istruzione ALTER INDEX ALL REBUILD.Creating a new clustered index, behaves the same as ALTER INDEX ALL REBUILD.

  • Le operazioni consentite su indici non cluster associati a un indice cluster dipendono dallo stato, disabilitato o abilitato, di entrambi i tipi di indice.Allowed actions on nonclustered indexes associated with a clustered index depend on the state, whether disabled or enabled, of both index types. Nella tabella seguente sono riepilogate le operazioni consentite sugli indici non cluster.The following table summarizes the allowed actions on nonclustered indexes.

    Operazione sull'indice non clusterNonclustered Index Action Indici cluster e non cluster disabilitatiWhen both the clustered and nonclustered indexes are disabled. Indice cluster abilitato e indice non cluster in entrambi gli statiWhen the clustered index is enabled and the nonclustered index is in either state.
    ALTER INDEX REBUILD.ALTER INDEX REBUILD. Operazione non eseguita.The action fails. Operazione eseguita.The action succeeds.
    DROP INDEX.DROP INDEX. Operazione eseguita.The action succeeds. Operazione eseguita.The action succeeds.
    CREATE INDEX WITH DROP_EXISTING.CREATE INDEX WITH DROP_EXISTING. Operazione non eseguita.The action fails. Operazione eseguita.The action succeeds.

Sicurezza Security

Autorizzazioni Permissions

È richiesta l'autorizzazione ALTER per la tabella o la vista.Requires ALTER permission on the table or view. Se si usa DBCC DBREINDEX, l'utente deve essere il proprietario della tabella oppure un membro del ruolo predefinito del server sysadmin o dei ruoli predefiniti del database db_ddladmin e db_owner .If using DBCC DBREINDEX, eser must either own the table or 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 abilitare un indice disabilitatoTo enable a disabled index

  1. In Esplora oggetti fare clic sul segno più per espandere il database contenente la tabella in cui si desidera abilitare un indice.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to enable an index.

  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 in cui si desidera abilitare un indice.Click the plus sign to expand the table on which you want to enable an index.

  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 che si vuole abilitare e selezionare Ricompila.Right-click the index you want to enable and select Rebuild.

  6. 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.

Per abilitare tutti gli indici in una tabellaTo enable all indexes on a table

  1. In Esplora oggetti fare clic sul segno più per espandere il database contenente la tabella in cui si desidera abilitare gli indici.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to enable the indexes.

  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 in cui si desidera abilitare gli indici.Click the plus sign to expand the table on which you want to enable the indexes.

  4. Fare clic con il pulsante destro del mouse sulla cartella Indici e selezionare Ricompila tutto.Right-click the Indexes folder and select Rebuild All.

  5. Nella finestra di dialogo Ricompila indici verificare che nella griglia Indici da ricompilare siano presenti gli indici corretti e fare clic su OK.In the Rebuild Indexes dialog box, verify that the correct indexes are in the Indexes to rebuild grid and click OK. Per rimuovere un indice dalla griglia Indici da ricompilare , selezionare l'indice desiderato, quindi premere il tasto CANC.To remove an index from the Indexes to rebuild grid, select the index and then press the Delete key.

    Le informazioni seguenti sono disponibili nella finestra di dialogo Ricompila indici :The following information is available in the Rebuild Indexes dialog box:

Utilizzo di Transact-SQL Using Transact-SQL

Per abilitare un indice disabilitato utilizzando ALTER INDEXTo enable a disabled index using ALTER INDEX

  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  
    -- Enables the IX_Employee_OrganizationLevel_OrganizationNode index  
    -- on the HumanResources.Employee table.  
    
    ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
    REBUILD;   
    GO  
    

Per abilitare un indice disabilitato utilizzando CREATE INDEXTo enable a disabled index using CREATE INDEX

  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  
    -- re-creates the IX_Employee_OrganizationLevel_OrganizationNode index  
    -- on the HumanResources.Employee table  
    -- using the OrganizationLevel and OrganizationNode columns  
    -- and then deletes the existing IX_Employee_OrganizationLevel_OrganizationNode index  
    CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
       (OrganizationLevel, OrganizationNode)  
    WITH (DROP_EXISTING = ON);  
    GO  
    

Per abilitare un indice disabilitato utilizzando DBCC DBREINDEXTo enable a disabled index using DBCC DBREINDEX

  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  
    -- enables the IX_Employee_OrganizationLevel_OrganizationNode index  
    -- on the HumanResources.Employee table  
    DBCC DBREINDEX ("HumanResources.Employee", IX_Employee_OrganizationLevel_OrganizationNode);  
    GO  
    

Per abilitare tutti gli indici in una tabella utilizzando ALTER INDEXTo enable all indexes on a table using ALTER INDEX

  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  
    -- enables all indexes  
    -- on the HumanResources.Employee table  
    ALTER INDEX ALL ON HumanResources.Employee  
    REBUILD;  
    GO  
    

Per abilitare tutti gli indici in una tabella utilizzando DBCC DBREINDEXTo enable all indexes on a table using DBCC DBREINDEX

  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  
    -- enables all indexes  
    -- on the HumanResources.Employee table  
    DBCC DBREINDEX ("HumanResources.Employee", " ");  
    GO  
    

    Per altre informazioni, vedere ALTER INDEX (Transact-SQL), CREATE INDEX (Transact-SQL) e DBCC DBREINDEX (Transact-SQL).For more information, see ALTER INDEX (Transact-SQL), CREATE INDEX (Transact-SQL), and DBCC DBREINDEX (Transact-SQL).