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 INDEXDEFRAG
di , 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 REBUILD
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 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