Share via


DBCC DBREINDEX (Transact-SQL)

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

Nota importanteImportante

Questa funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Non utilizzare questa funzionalità in un nuovo progetto di sviluppo e modificare non appena possibile le applicazioni in cui è attualmente implementata. Utilizzare ALTER INDEX in alternativa.

Icona di collegamento a un argomento Convenzioni 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 ricompilare. I nomi delle tabelle devono essere conformi alle regole per gli identificatori.

  • index_name
    Nome dell'indice da ricompilare. 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 su ogni pagina di indice per l'archiviazione di dati quando l'indice viene creato o ricompilato. fillfactor sostituisce il fattore di riempimento quando l'indice è stato creato, diventando il nuovo valore predefinito per l'indice e ogni altro indice non cluster ricompilato perché è stato ricompilato 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 Specificare un fattore di riempimento per un indice.

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

Osservazioni

DBCC DBREINDEX ricompila 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 noti. Questa situazione potrebbe verificarsi dopo una copia bulk di dati in una tabella.

L'istruzione DBCC DBREINDEX può ricompilare 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à offline. 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 offline. Per eseguire la ricompilazione di un indice in modalità online oppure per controllare il grado di parallelismo durante l'operazione di ricompilazione dell'indice, utilizzare l'istruzione ALTER INDEX REBUILD con l'opzione ONLINE..

Per ulteriori informazioni sulla selezione di un metodo di ricompilazione o riorganizzazione di un indice, vedere Riorganizzare e ricompilare gli indici.

Restrizioni

DBCC DBREINDEX non è utilizzabile con gli oggetti seguenti:

  • Tabelle di sistema

  • Indici spaziali

  • indici columnstore ottimizzati in memoria xVelocity

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.Ricompilazione di un indice

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

USE AdventureWorks2012; 
GO
DBCC DBREINDEX ("HumanResources.Employee", PK_Employee_BusinessEntityID,80);
GO

B.Ricompilazione di tutti gli indici

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

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

Vedere anche

Riferimento

ALTER TABLE (Transact-SQL)

CREATE TABLE (Transact-SQL)

DBCC (Transact-SQL)

sys.indexes (Transact-SQL)

sys.dm_db_index_physical_stats (Transact-SQL)

ALTER INDEX (Transact-SQL)