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