DBCC DBREINDEX (Transact-SQL)
platí pro:SQL Server
azure SQL Managed Instance
Znovu sestaví jeden nebo více indexů pro tabulku v zadané databázi.
Důležitý
Tato funkce bude odebrána v budoucí verzi SQL Serveru. Nepoužívejte tuto funkci v nové vývojové práci a naplánujte úpravu aplikací, které tuto funkci aktuálně používají. Místo toho použijte ALTER INDEX.
platí pro: SQL Server 2008 (10.0.x) a novější verze.
Syntax
DBCC DBREINDEX
(
table_name
[ , index_name [ , fillfactor ] ]
)
[ WITH NO_INFOMSGS ]
Argumenty
table_name
Název tabulky obsahující zadaný index nebo indexy, které se mají znovu sestavit. Názvy tabulek musí dodržovat pravidla pro identifikátory .
index_name
Název indexu, který se má znovu sestavit. Názvy indexů musí splňovat pravidla pro identifikátory. Je-li zadán index_name, je nutné zadat table_name. Pokud index_name není zadán nebo je ' '
, všechny indexy tabulky se znovu sestaví.
fillfactor
Procento místa na každé stránce indexu pro ukládání dat při vytvoření nebo vytvoření indexu. fillfactor nahradí faktor výplně při vytvoření indexu, stane se novým výchozím nastavením indexu a pro všechny ostatní neclusterované indexy znovu sestavené, protože clusterovaný index se znovu sestaví.
Pokud fillfactor je 0, DBCC DBREINDEX
použije hodnotu vyplnit jako poslední zadanou pro index. Tato hodnota je uložena v zobrazení katalogu sys.indexes
.
Pokud je zadán fillfactor, je nutné zadat table_name a index_name. Pokud fillfactor není zadaný, použije se výchozí faktor výplně 100. Další informace najdete v tématu Určení faktoru vyplnění indexu.
WITH NO_INFOMSGS
Potlačí všechny informační zprávy, které mají úrovně závažnosti od 0 do 10.
Poznámky
DBCC DBREINDEX
znovu sestaví index pro tabulku nebo všechny indexy definované pro tabulku. Díky dynamickému opětovnému vytvoření indexu je možné znovu vytvořit indexy, které vynucují omezení PRIMÁRNÍ KLÍČ nebo JEDINEČNÉ, aniž by bylo nutné tato omezení vyřadit a znovu vytvořit. To znamená, že index lze znovu vytvořit bez znalosti struktury tabulky nebo jejích omezení. K tomu může dojít po hromadné kopii dat do tabulky.
DBCC DBREINDEX
může znovu sestavit všechny indexy tabulky v jednom příkazu. To je jednodušší než kódování více DROP INDEX
a CREATE INDEX
příkazů. Vzhledem k tomu, že práce je provedena jedním příkazem, DBCC DBREINDEX
je automaticky atomická, zatímco jednotlivé DROP INDEX
a CREATE INDEX
příkazy musí být zahrnuty do transakce, aby byla atomická.
DBCC DBREINDEX
také nabízí více optimalizací než jednotlivé DROP INDEX
a CREATE INDEX
příkazy.
Na rozdíl od DBCC INDEXDEFRAG
nebo ALTER INDEX
s možností REORGANIZE
je DBCC DBREINDEX
offline operací. Pokud se neclusterovaný index znovu sestaví, v příslušné tabulce se během operace uchovává sdílený zámek. Tím se zabrání úpravám tabulky. Pokud se clusterovaný index znovu sestaví, bude se uchovávat exkluzivní zámek tabulky. Tím zabráníte všem přístupům k tabulce, takže je tabulka offline. Pokud chcete provést opětovné sestavení indexu online nebo řídit stupeň paralelismu během operace opětovného sestavení indexu, použijte příkaz ALTER INDEX REBUILD
s možností ONLINE
.
Další informace o výběru metody pro opětovné sestavení nebo změna uspořádání indexu naleznete v tématu Změna uspořádání a opětovného sestavení indexů.
Omezení
DBCC DBREINDEX
se nepodporuje pro použití u následujících objektů:
- Systémové tabulky
- Prostorové indexy
- indexy columnstore optimalizované pro paměť
Sady výsledků
Není-li zadán NO_INFOMSGS
(musí být zadán název tabulky), DBCC DBREINDEX
vždy vrátí:
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Dovolení
Volající musí vlastnit tabulku nebo být členem role správce systému pevné role serveru, db_owner pevné databázové role nebo db_ddladmin pevné databázové role.
Příklady
A. Opětovné sestavení indexu
Následující příklad znovu sestaví Employee_EmployeeID
clusterovaný index s vyplněným faktorem 80
v tabulce Employee
v databázi AdventureWorks2022
.
USE AdventureWorks2022;
GO
DBCC DBREINDEX ('HumanResources.Employee', PK_Employee_BusinessEntityID, 80);
GO
B. Opětovné sestavení všech indexů
Následující příklad znovu sestaví všechny indexy v tabulce Employee
v AdventureWorks2022
pomocí hodnoty faktoru vyplnění 70
.
USE AdventureWorks2022;
GO
DBCC DBREINDEX ('HumanResources.Employee', ' ', 70);
GO
Viz také
- 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)