DBCC DBREINDEX (Transact-SQL)

Ricostruisce uno o più indici di una tabella nel database specificato.

Nota importanteImportante

Questa caratteristica verrà rimossa a partire dalla prossima versione di Microsoft SQL Server. Evitare di utilizzare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Utilizzare ALTER INDEX in alternativa.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

DBCC DBREINDEX 
( 
    table_name 
    [ , index_name [ , fillfactor ] ]
)
    [ WITH NO_INFOMSGS ] 

Argomenti

  • table_name
    Nome della tabella che contiene l'indice o gli indici specificati da ricostruire. I nomi delle tabelle devono essere conformi alle regole per gli identificatori.

  • index_name
    Nome dell'indice da ricostruire. I nomi degli indici devono essere conformi alle regole per gli identificatori. Se si specifica index_name, è necessario specificare anche table_name. Se index_name viene omesso o viene specificato come " ", vengono ricostruiti tutti gli indici della tabella.

  • fillfactor
    Percentuale di spazio di ogni pagina di indice per l'archiviazione dei dati quando viene creato o ricostruito l'indice. Durante la creazione dell'indice fillfactor sostituisce il fattore di riempimento come nuovo valore predefinito per l'indice e per qualsiasi indice non cluster ricostruito in seguito alla ricostruzione di un indice cluster. Se fillfactor è 0, DBCC DBREINDEX utilizza l'ultimo valore del fattore di riempimento specificato per l'indice. Questo valore è archiviato nella vista del catalogo sys.indexes.

    Se si specifica fillfactor, è necessario specificare anche table_name e index_name. Se fillfactor viene omesso, viene utilizzato il fattore di riempimento predefinito, ovvero 100. Per ulteriori informazioni, vedere Fattore di riempimento.

  • WITH NO_INFOMSGS
    Evita la visualizzazione di tutti i messaggi informativi con livello di gravità compreso tra 0 e 10.

Osservazioni

DBCC DBREINDEX ricostruisce un indice di tabella o tutti gli indici definiti per una tabella. Quando è supportata la ricostruzione dinamica di un indice, è possibile ricostruire gli indici che applicano vincoli PRIMARY KEY o UNIQUE senza dover eliminare o ricreare tali vincoli. Ciò significa che un indice può essere ricostruito anche se la struttura di una tabella o i relativi vincoli non sono conosciuti. Questa situazione potrebbe verificarsi dopo una copia bulk di dati in una tabella.

L'istruzione DBCC DBREINDEX può ricostruire tutti gli indici di una tabella in un'unica istruzione. Ciò risulta più semplice rispetto alla specificazione di più istruzioni DROP INDEX e CREATE INDEX a livello di codice. Poiché l'intera operazione viene eseguita da un'unica istruzione, DBCC DBREINDEX risulta automaticamente un'istruzione atomica. Le singole istruzioni DROP INDEX e CREATE INDEX invece risultano atomiche solo quando vengono inserite in una transazione. L'istruzione DBCC DBREINDEX è inoltre caratterizzata da un maggior numero di ottimizzazioni rispetto alle singole istruzioni DROP INDEX e CREATE INDEX.

A differenza di DBCC INDEXDEFRAG oppure di ALTER INDEX con l'opzione REORGANIZE, l'istruzione DBCC DBREINDEX viene eseguita in modalità non in linea. In caso di ricostruzione di un indice non cluster, viene mantenuto attivo un blocco condiviso sulla tabella in questione per l'intera durata dell'operazione. Ciò impedisce che vengano apportate modifiche alla tabella. In caso di ricostruzione di un indice cluster, viene mantenuto attivo un blocco esclusivo a livello di tabella. Ciò impedisce qualsiasi tipo di accesso alla tabella e la rende effettivamente non in linea. Per eseguire la ricostruzione di un indice in modalità in linea oppure per controllare il grado di parallelismo durante l'operazione di ricostruzione dell'indice, utilizzare l'istruzione ALTER INDEX REBUILD con l'opzione ONLINE..

Per ulteriori informazioni sulla selezione di un metodo di ricostruzione o riorganizzazione di un indice, vedere Riorganizzazione e ricostruzione degli indici.

Restrizioni

DBCC DBREINDEX non è utilizzabile con gli oggetti seguenti:

  • Tabelle di sistema

  • Indici spaziali

Set di risultati

A meno che l'opzione NO_INFOMSGS non sia specificata (è necessario specificare il nome della tabella), DBCC DBREINDEX restituisce sempre quanto segue:

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Autorizzazioni

Il chiamante deve essere proprietario della tabella o membro del ruolo predefinito del server sysadmin o dei ruoli predefiniti del database db_owner e db_ddladmin.

Esempi

A. Ricostruzione di un indice

Nell'esempio seguente viene ricostruito l'indice cluster Employee_EmployeeID con un fattore di riempimento pari a 80 nella tabella Employee del database AdventureWorks.

USE AdventureWorks; 
GO
DBCC DBREINDEX ("HumanResources.Employee", PK_Employee_EmployeeID,80);
GO

B. Ricostruzione di tutti gli indici

Nell'esempio seguente vengono ricostruiti tutti gli indici nella tabella Employee del database AdventureWorks in base a un fattore di riempimento il cui valore è 70.

USE AdventureWorks; 
GO
DBCC DBREINDEX ("HumanResources.Employee", " ", 70);
GO