Sdílet prostřednictvím


DBCC DBREINDEX (Transact-SQL)

platí pro:SQL Serverazure 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.

Transact-SQL konvence syntaxe

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 INDEXDEFRAGnebo 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é