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 nelle versioni future 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. In alternativa, usare ALTER INDEX.

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

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

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 è ' ', tutti gli indici per la tabella vengono ricompilati.

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 al momento della creazione dell'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 l'ultimo valore del fattore di riempimento specificato per l'indice. Questo valore viene archiviato nella vista del sys.indexes catalogo.

Se fillfactor è specificato, table_name e index_name devono essere specificati. Se fillfactor non viene 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 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'unica istruzione. Questa operazione è più semplice rispetto alla codifica di più DROP INDEX istruzioni e CREATE INDEX . Poiché il lavoro viene eseguito da un'istruzione, viene automaticamente atomico, DBCC DBREINDEX mentre le singole DROP INDEX istruzioni e CREATE INDEX devono essere incluse in una transazione per essere atomiche. DBCC DBREINDEX Offre inoltre più ottimizzazioni rispetto alle singole DROP INDEX istruzioni e CREATE INDEX .

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

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 venga specificato (è necessario specificare il nome della tabella), 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