DBCC INDEXDEFRAG (Transact-SQL)

Defragmentuje indeksów określonej tabela lub widoku.

Important noteImportant Note:

This feature will be removed in the next version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Użycie ZMIANA INDEKSU zamiast niego.

Topic link iconKonwencje składni języka Transact-SQL

DBCC INDEXDEFRAG
(
    { database_name | database_id | 0 } 
        , { table_name | table_id | view_name | view_id } 
    [ , { index_name | index_id } [ , { partition_number | 0 } ] ]
)
    [ WITH NO_INFOMSGS ] 

Argumenty

  • database_name| database_id | 0
    Czy bazę danych zawierającą indeks, zdefragmentować.Jeśli określono wartość 0, używana jest bieżąca baza danych.Nazwy bazy danych muszą być zgodne z zasadami identyfikatory.

  • table_name | table_id | view_name | view_id
    Jest tabela lub widok zawierającą indeks, aby zdefragmentować.Nazwy tabel i widoku muszą być zgodne z regułami identyfikatorów.

  • index_name | index_id
    Jest to nazwa lub identyfikator indeksu defragmentacji.Jeśli nie zostanie określony, instrukcja defragmentuje wszystkie indeksy określonej tabela lub widoku.Indeks nazw muszą być zgodne z regułami identyfikatorów.

  • partition_number | 0
    Jest numerem partycji indeksu defragmentacji.Jeśli nie zostanie określony, lub jeżeli określono wartość 0, instrukcja defragmentuje wszystkich partycji w określonym indeksem.

  • Z NO_INFOMSGS
    Pomija wszystkie komunikaty informacyjne, których poziomy ważności, od 0 do 10.

Remarks

DBCC INDEXDEFRAG defragmentuje poziomu poziom liścia indeks tak, aby fizyczna kolejność stron zgodny porządek logiczny węzłów liściowych od lewej do prawej w związku z tym zwiększania wydajności skanowanie indeksu.

Uwaga

Po uruchomieniu INDEXDEFRAG DBCC defragmentacji indeksu występuje pojedynczo.Oznacza to, że operację na jednym indeksie jest wykonywane przy użyciu pojedynczego wątek.Proste nie występuje.Ponadto operacji na wiele indeksów dla tej samej instrukcja INDEXDEFRAG DBCC są wykonywane na jeden indeks w czas.

DBCC INDEXDEFRAG kompaktuje również strony indeksu, biorąc pod uwagę określony współczynnik wypełnienia podczas tworzenia indeksu.Żadnych pustych stron utworzonych ze względu na to kompaktowanie są usuwane.Aby uzyskać więcej informacji zobaczFill Factor.

Jeżeli indeks obejmuje więcej niż jeden plik, INDEXDEFRAG DBCC defragmentuje jeden plik na czas.Strony nie są migrowane między plikami.

DBCC INDEXDEFRAG raportów, szacowaną wartość procentową ukończone co pięć minut.DBCC INDEXDEFRAG mogą zostać zatrzymane w dowolnym punkcie w procesie, a wszelkie Praca wykonana zostanie zachowane.

W odróżnieniu od DBCC DBREINDEX lub indeksu, zazwyczaj budowania operacji INDEXDEFRAG DBCC jest operacją online.Nie przechowuje on długoterminowej blokady.Dlatego INDEXDEFRAG DBCC nie blokuje, uruchamianie kwerendy lub aktualizacji.Ponieważ czas potrzebnego na defragmentację jest związany z poziom rozdrobnienia, względnie unfragmented indeks może być defragmentowane szybciej, niż może być budowany nowego indeksu.Jest bardzo pofragmentowany indeks może trwać znacznie dłużej zdefragmentować niż aby odbudować.

Defragmentacji zawsze pełni jest rejestrowane, niezależnie od bazy danych model odzyskiwanie ustawienie.Aby uzyskać więcej informacji zobaczALTER DATABASE języka Transact-SQL).Defragmentacja jest bardzo pofragmentowany indeks może generować dziennika więcej, niż Tworzenie indeksu w pełni zarejestrowany.Jednak defragmentacji jest wykonywane jako serię krótkich transakcji tak dużego dziennika nie jest konieczne, jeśli często pobierane są kopie zapasowe dziennika lub ustawienie modelu odzyskiwanie jest SIMPLE.

Ograniczenia

DBCC INDEXDEFRAG shuffles stron typu liść indeksu w miejscu.W związku z tym Jeśli indeks jest z przeplotem z pozostałych indeksów na dysku, systemem INDEXDEFRAG DBCC wobec tego indeksu nie oznacza, że wszystkie strony liść w indeksie sąsiadujących ze sobą.Aby poprawić klastrowanie stron, odbudowanie indeksu.

DBCC INDEXDEFRAG nie może być używany do defragmentowania indeksów następujące:

  • wyłączony indeks.

  • Indeks o blokowaniu strona zestaw na OFF.

  • Indeks przestrzennej.

DBCC INDEXDEFRAG nie jest obsługiwana do użytku w tabelach systemowych.

Zestawy wyników

DBCC INDEXDEFRAG zwraca następujący zestaw wyników (wartości mogą być różne), jeśli indeks jest określona w instrukcja (o ile nie określono WITH NO_INFOMSGS):

Pages Scanned Pages Moved Pages Removed
------------- ----------- -------------
359           346         8

(1 row(s) affected)

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Uprawnienia

Obiekt wywołujący musi własnej tabela lub być członkiem sysadmin stała rola serwera db_owner stałe rola bazy danych lub db_ddladmin stała rola bazy danych.

Przykłady

A.Za pomocą INDEXDEFRAG DBCC zdefragmentować indeksu

W poniższym przykładzie defragmentuje wszystkie partycje z PK_Product_ProductID Indeks w Production.Product Tabela w AdventureWorks Baza danych.

B.Za pomocą SHOWCONTIG DBCC i INDEXDEFRAG DBCC zdefragmentować indeksów w bazie danych

W poniższym przykładzie pokazano prosty sposób defragmentowania wszystkie indeksy w bazie danych, które są pofragmentowane powyżej progu zadeklarowana.