DBCC DBREINDEX (Transact-SQL)
Dotyczy:programu SQL Server
Azure SQL Managed Instance
Ponowne kompilowanie co najmniej jednego indeksu dla tabeli w określonej bazie danych.
Ważny
Ta funkcja zostanie usunięta w przyszłej wersji programu SQL Server. Unikaj używania tej funkcji w nowych pracach programistycznych i zaplanuj modyfikowanie aplikacji, które obecnie korzystają z tej funkcji. Zamiast tego użyj ALTER INDEX.
Dotyczy: SQL Server 2008 (10.0.x) i nowsze wersje.
Transact-SQL konwencje składni
Składnia
DBCC DBREINDEX
(
table_name
[ , index_name [ , fillfactor ] ]
)
[ WITH NO_INFOMSGS ]
Argumenty
table_name
Nazwa tabeli zawierającej określony indeks lub indeksy do ponownego skompilowania. Nazwy tabel muszą być zgodne z regułami dotyczącymi identyfikatorów .
index_name
Nazwa indeksu do ponownego skompilowania. Nazwy indeksów muszą być zgodne z regułami dotyczącymi identyfikatorów. Jeśli określono index_name, należy określić table_name. Jeśli index_name nie jest określona lub jest ' '
, wszystkie indeksy tabeli zostaną ponownie skompilowane.
fillfactor
Procent miejsca na każdej stronie indeksu do przechowywania danych podczas tworzenia lub odbudowy indeksu. fillfactor zastępuje współczynnik wypełnienia podczas tworzenia indeksu, stając się nowym domyślnym ustawieniem indeksu i dla innych indeksów nieklastrowanych, ponieważ indeks klastrowany jest odbudowywany.
Jeśli fillfactor wynosi 0, DBCC DBREINDEX
używa ostatnio podanej wartości współczynnika wypełnienia dla indeksu. Ta wartość jest przechowywana w widoku wykazu sys.indexes
.
Jeśli określono fillfactor, należy określić table_name i index_name. Jeśli nie określono fillfactor, zostanie użyty domyślny współczynnik wypełnienia 100. Aby uzyskać więcej informacji, zobacz Określanie współczynnika wypełnienia dla indeksu.
Z NO_INFOMSGS
Pomija wszystkie komunikaty informacyjne, które mają poziomy ważności od 0 do 10.
Uwagi
DBCC DBREINDEX
ponownie kompiluje indeks dla tabeli lub wszystkich indeksów zdefiniowanych dla tabeli. Dzięki umożliwieniu dynamicznego odbudowy indeksu indeksy wymuszające tworzenie klucza podstawowego lub unikatowych ograniczeń można odtworzyć bez konieczności porzucania i ponownego tworzenia tych ograniczeń. Oznacza to, że indeks można odtworzyć bez znajomości struktury tabeli lub jej ograniczeń. Taka sytuacja może wystąpić po zbiorczej kopii danych do tabeli.
DBCC DBREINDEX
można ponownie skompilować wszystkie indeksy dla tabeli w jednej instrukcji. Jest to łatwiejsze niż kodowanie wielu instrukcji DROP INDEX
i CREATE INDEX
. Ponieważ praca jest wykonywana przez jedną instrukcję, DBCC DBREINDEX
jest automatycznie niepodzielna, podczas gdy poszczególne instrukcje DROP INDEX
i CREATE INDEX
muszą być zawarte w transakcji, aby być niepodzielne. Ponadto DBCC DBREINDEX
oferuje więcej optymalizacji niż poszczególne instrukcje DROP INDEX
i CREATE INDEX
.
W przeciwieństwie do DBCC INDEXDEFRAG
lub ALTER INDEX
z opcją REORGANIZE
DBCC DBREINDEX
jest operacją offline. Jeśli indeks nieklastrowany jest odbudowywany, blokada współużytkowana jest przechowywana w danej tabeli podczas operacji. Zapobiega to modyfikacjom tabeli. Jeśli indeks klastrowany jest odbudowywany, blokada tabeli jest przechowywana na wyłączność. Zapobiega to dostępowi do tabeli, dlatego skutecznie powoduje, że tabela jest w trybie offline. Aby wykonać ponowną kompilację indeksu w trybie online lub kontrolować stopień równoległości podczas operacji ponownego kompilowania indeksu, użyj instrukcji ALTER INDEX REBUILD
z opcją ONLINE
.
Aby uzyskać więcej informacji na temat wybierania metody ponownego kompilowania lub reorganizacji indeksu, zobacz Reorganize and Rebuild Indexes.
Ograniczenia
DBCC DBREINDEX
nie jest obsługiwana do użycia w następujących obiektach:
- Tabele systemowe
- Indeksy przestrzenne
- zoptymalizowane pod kątem pamięci indeksy magazynu kolumn
Zestawy wyników
O ile nie określono NO_INFOMSGS
(należy określić nazwę tabeli), DBCC DBREINDEX
zawsze zwraca następujące elementy:
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Uprawnienia
Obiekt wywołujący musi być właścicielem tabeli lub być członkiem sysadmin stałej roli serwera, db_owner stałej roli bazy danych lub stałej roli bazy danych db_ddladmin.
Przykłady
A. Ponowne kompilowanie indeksu
Poniższy przykład ponownie kompiluje indeks klastrowany Employee_EmployeeID
z współczynnikiem wypełnienia 80
w tabeli Employee
w bazie danych AdventureWorks2022
.
USE AdventureWorks2022;
GO
DBCC DBREINDEX ('HumanResources.Employee', PK_Employee_BusinessEntityID, 80);
GO
B. Ponowne kompilowanie wszystkich indeksów
Poniższy przykład ponownie kompiluje wszystkie indeksy w tabeli Employee
w AdventureWorks2022
przy użyciu wartości współczynnika wypełnienia 70
.
USE AdventureWorks2022;
GO
DBCC DBREINDEX ('HumanResources.Employee', ' ', 70);
GO