Condividi tramite


DBCC DBREINDEX (Transact-SQL)

Si applica a: SQL Server Istanza gestita di SQL di Azure

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

Importante

Questa funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. In alternativa, usare ALTER INDEX.

Si applica a: SQL Server 2008 (10.0.x) e versioni successive.

Convenzioni di sintassi Transact-SQL

Sintassi

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

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 e versioni precedenti, vedere Documentazione delle versioni precedenti.

Argomenti

table_name

Nome della tabella contenente 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 index_name è specificato, deve essere specificato table_name. Se index_name non è specificato o è ' ', vengono ricompilati tutti gli indici per la tabella.

fillfactor

Percentuale di spazio in ogni pagina di indice per l'archiviazione dei dati quando l'indice viene creato o ricompilato. fillfactor sostituisce il fattore di riempimento quando è stato creato l'indice, diventando il nuovo valore predefinito per l'indice e per qualsiasi altro indice non cluster ricompilato, perché viene ricompilato un indice cluster.

Quando fillfactor è 0, DBCC DBREINDEX usa il valore del fattore di riempimento specificato per l'indice. Questo valore viene archiviato nella sys.indexes visualizzazione catalogo.

Se fillfactor è specificato, table_name e index_name devono essere specificati. Se fillfactor non è specificato, viene usato il fattore di riempimento predefinito 100. Per altre 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 per una tabella o per 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.

DBCC DBREINDEX può ricompilare tutti gli indici per una tabella in un'istruzione. Questo è più semplice rispetto alla codifica di più DROP INDEX istruzioni e CREATE INDEX . Poiché il lavoro viene eseguito da un'istruzione, DBCC DBREINDEX è automaticamente atomico, mentre le singole DROP INDEX istruzioni e CREATE INDEX devono essere incluse in una transazione da atomica. DBCC DBREINDEX Offre anche più ottimizzazioni rispetto alle singole DROP INDEX istruzioni eCREATE INDEX.

A differenza DBCC INDEXDEFRAGdi , o ALTER INDEX con l'opzione REORGANIZE , DBCC DBREINDEX è un'operazione offline. Se viene ricompilato un indice non cluster, viene mantenuto un blocco condiviso nella tabella in questione durante l'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 una ricompilazione dell'indice online o controllare il grado di parallelismo durante l'operazione di ricompilazione dell'indice, usare l'istruzione con l'opzione ALTER INDEX REBUILDONLINE .

Per altre informazioni sulla selezione di un metodo per ricompilare o riorganizzare un indice, vedere Riorganizzare e ricompilare gli indici.

Restrizioni

DBCC DBREINDEX non è supportato per l'uso negli oggetti seguenti:

  • Tabelle di sistema
  • Indici spaziali
  • indici columnstore ottimizzati per la memoria

Set di risultati

A meno che NO_INFOMSGS non sia specificato (il nome della tabella deve essere specificato), DBCC DBREINDEX restituisce sempre:

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

R. Ricompilare 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 AdventureWorks2022.

USE AdventureWorks2022;
GO
DBCC DBREINDEX ('HumanResources.Employee', PK_Employee_BusinessEntityID, 80);
GO

B. Ricompilare tutti gli indici

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

USE AdventureWorks2022;
GO
DBCC DBREINDEX ('HumanResources.Employee', ' ', 70);
GO

Vedi anche