Condividi tramite


Abilitare indici e vincoli

Si applica a:SQL Serverdatabase SQL di AzureIstanza gestita di SQL di Azuredatabase SQL in Microsoft Fabric

Questo articolo descrive come abilitare un indice disabilitato in SQL Server usando SQL Server Management Studio o Transact-SQL. Dopo che un indice è disabilitato, rimane disabilitato fino a quando non viene ricostruito o eliminato.

Limitazioni

Dopo la ricompilazione dell'indice, tutti i vincoli disabilitati a causa della disabilitazione dell'indice devono essere abilitati manualmente. PRIMARY KEY e i vincoli UNIQUE sono abilitati ricompilando l'indice associato. Questo indice deve essere ricostruito prima di poter abilitare i vincoli FOREIGN KEY che fanno riferimento al vincolo PRIMARY KEY o UNIQUE. FOREIGN KEY I vincoli vengono abilitati tramite l'istruzione ALTER TABLE CHECK CONSTRAINT .

La ricompilazione di un indice cluster disabilitato non può essere eseguita quando l'opzione ONLINE è impostata su 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.

Azione dell'indice clusterizzato Stato disabilitato dell'indice non clusterizzato
ALTER INDEX REBUILD Rimane disabilitato
ALTER INDEX ALL REBUILD Ricostruito e abilitato
DROP INDEX Ricostruito e abilitato
CREATE INDEX WITH DROP_EXISTING Rimane disabilitato

La creazione di un nuovo indice cluster ha lo stesso comportamento di 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. Nella tabella seguente sono riepilogate le operazioni consentite sugli indici non cluster.

Indice non clusterizzato Quando gli indici cluster e non-cluster sono disabilitati Quando l'indice cluster è abilitato e l'indice non cluster è in entrambi gli stati
ALTER INDEX REBUILD L'azione ha esito negativo L'azione ha esito positivo
DROP INDEX L'azione ha esito positivo L'azione ha esito positivo
CREATE INDEX WITH DROP_EXISTING L'azione ha esito negativo L'azione ha esito positivo

Quando si ricompilano indici compressi non cluster disabilitati, data_compression per impostazione predefinita viene impostato su none, ovvero gli indici non sono compressi. A causa delle impostazioni di compressione, i metadati delle impostazioni vengono persi quando gli indici non clusterizzati sono disabilitati. Per risolvere questo problema, è necessario specificare la compressione esplicita dei dati nell'istruzione rebuild.

Autorizzazioni

È richiesta l'autorizzazione ALTER per la tabella o la vista. Se si usa DBCC DBREINDEX, è necessario essere proprietari della tabella o appartenere al ruolo predefinito del server sysadmin oppure essere membro di uno dei ruoli predefiniti del database db_ddladmin o db_owner.

Uso di SQL Server Management Studio

Abilitare un indice disabilitato

  1. In Esplora oggetti selezionare il segno più per espandere il database contenente la tabella in cui si desidera abilitare un indice.

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

  3. Selezionare il segno più per espandere la tabella in cui si vuole abilitare un indice.

  4. Fare clic sul segno di addizione per espandere la cartella Indici.

  5. Fare clic con il pulsante destro del mouse sull'indice che si vuole abilitare e selezionare Ricompila.

  6. Nella finestra di dialogo Ricompila indici verificare che nella griglia Indici da ricompilare sia presente l'indice corretto e fare clic su OK.

Abilitare tutti gli indici in una tabella

  1. In Esplora oggetti selezionare il segno più per espandere il database contenente la tabella in cui si desidera abilitare gli indici.

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

  3. Selezionare il segno più per espandere la tabella in cui si desidera abilitare gli indici.

  4. Fare clic con il pulsante destro del mouse sulla cartella Indici e selezionare Ricompila tutto.

  5. Nella finestra di dialogo Ricompila indici verificare che gli indici corretti si trovino nella griglia Indici da ricompilare e selezionare OK. Per rimuovere un indice dalla griglia Indici da ricompilare , selezionare l'indice desiderato, quindi premere il tasto CANC.

Le informazioni seguenti sono disponibili nella finestra di dialogo Ricompila indici :

Usare Transact-SQL

Gli esempi di codice in questo articolo usano il database di esempio AdventureWorks2022 o AdventureWorksDW2022, che è possibile scaricare dalla home page Microsoft SQL Server Samples and Community Projects.

Abilitare un indice disabilitato tramite ALTER INDEX

Eseguire il seguente script Transact-SQL. In questo esempio viene abilitato l'indice IX_Employee_OrganizationLevel_OrganizationNode nella HumanResources.Employee tabella.

USE AdventureWorks2022;
GO

ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode
ON HumanResources.Employee REBUILD;
GO

Abilitare un indice disabilitato tramite CREATE INDEX

Eseguire il seguente script Transact-SQL. In questo esempio viene ricreato l'indice IX_Employee_OrganizationLevel_OrganizationNode nella HumanResources.Employee tabella, usando le OrganizationLevel colonne e OrganizationNode , quindi viene eliminato l'indice esistente IX_Employee_OrganizationLevel_OrganizationNode .

USE AdventureWorks2022;
GO

CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode
ON HumanResources.Employee(OrganizationLevel, OrganizationNode) WITH (DROP_EXISTING = ON);
GO

Abilitare un indice disabilitato tramite DBCC DBREINDEX

Annotazioni

Questa funzionalità verrà rimossa in una versione futura di SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

Eseguire il seguente script Transact-SQL. In questo esempio viene abilitato l'indice IX_Employee_OrganizationLevel_OrganizationNode nella HumanResources.Employee tabella.

USE AdventureWorks2022;
GO

DBCC DBREINDEX ("HumanResources.Employee", IX_Employee_OrganizationLevel_OrganizationNode);
GO

Abilitare tutti gli indici in una tabella usando ALTER INDEX

Eseguire il seguente script Transact-SQL. In questo esempio vengono attivati tutti gli indici della HumanResources.Employee tabella.

USE AdventureWorks2022;
GO

ALTER INDEX ALL
ON HumanResources.Employee REBUILD;
GO

Abilitare tutti gli indici in una tabella usando DBCC DBREINDEX

Annotazioni

Questa funzionalità verrà rimossa in una versione futura di SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

Eseguire lo script seguente Transact-SQL. In questo esempio vengono attivati tutti gli indici della HumanResources.Employee tabella.

USE AdventureWorks2022;
GO

DBCC DBREINDEX ("HumanResources.Employee", " ");
GO