ALTER INDEX (języka Transact-SQL)

Modyfikuje istniejącej tabela lub widoku indeksu (relacyjna lub plik XML) przez wyłączenie, przebudowywanie lub zmiana indeksu; lub ustawienie opcji w indeksie.

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

ALTER INDEX { index_name | ALL }
    ON <object>
    { REBUILD 
        [ [PARTITION = ALL]
          [ WITH ( <rebuild_index_option> [ ,...n ] ) ] 
          | [ PARTITION = partition_number 
                [ WITH ( <single_partition_rebuild_index_option>
                        [ ,...n ] )
                ] 
            ]
        ]
    | DISABLE
    | REORGANIZE 
        [ PARTITION = partition_number ]
        [ WITH ( LOB_COMPACTION = { ON | OFF } ) ]
  | SET ( <set_index_option> [ ,...n ] ) 
    }
[ ; ]

<object> ::=
{
    [ database_name. [ schema_name ] . | schema_name. ]
        table_or_view_name
}

<rebuild_index_option > ::=
{
    PAD_INDEX = { ON | OFF }
  | FILLFACTOR = fillfactor 
  | SORT_IN_TEMPDB = { ON | OFF }
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { ON | OFF }
  | ONLINE = { ON | OFF } 
  | ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = { NONE | ROW | PAGE } 
     [ ON PARTITIONS ( { <partition_number_expression> | <range> } 
     [ , ...n ] ) ]
}
<range> ::= 
<partition_number_expression> TO <partition_number_expression>
}

<single_partition_rebuild_index_option> ::=
{
    SORT_IN_TEMPDB = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = { NONE | ROW | PAGE } }
}

<set_index_option>::=
{
    ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS = { ON | OFF }
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { ON | OFF }
}

Argumenty

  • index_name
    To nazwa indeksu.Nazwy indeksu musi być unikatowa w obrębie tabela lub widoku, ale nie muszą być unikatowe w bazie danych.Indeks nazwy muszą być zgodne z regułami identyfikatory.

  • ALL
    Określa wszystkie indeksy skojarzone z tabela lub widoku, niezależnie od typu indeksu.Określenie ALL powoduje instrukcję, aby się nie powieść, jeśli jednego lub kilku indeksów znajdują się w trybie offline lub jest tylko do odczytu grupa plików lub określona operacja jest niedozwolona na jeden lub więcej typów indeksu.Następująca tabela zawiera listę operacji indeksu i Niedozwolone typy indeksu.

    Określanie ALL przy użyciu tej operacji

    Kończy się niepowodzeniem, jeśli tabela zawiera jeden lub więcej

    ODBUDUJ ONLINE = DALEJ

    Indeks XML

    Indeks przestrzenny

    Kolumny Typ danych dużego obiektu: image, text, ntext, varchar(max), nvarchar(max), varbinary(max), a xml

    ODBUDOWYWANIE PARTYCJI = partition_number

    Nonpartitioned indeksu, indeks XML, przestrzennej indeksu lub wyłączony indeks

    ZMIENIANIE KOLEJNOŚCI

    Indeksy z ALLOW_PAGE_LOCKS ustawić na OFF

    REORGANIZACJA PARTYCJI = partition_number

    Nonpartitioned indeksu, indeks XML, przestrzennej indeksu lub wyłączony indeks

    IGNORE_DUP_KEY = DALEJ

    Indeks przestrzenny

    Indeks XML

    TRYB ONLINE = DALEJ

    Indeks przestrzenny

    Indeks XML

    Jeśli wszystko jest określany za pomocą PARTITION = partition_number, wszystkie indeksy muszą być dostosowane. Oznacza to, że te są partycjami oparta na funkcjach równoważne partycji.Przy użyciu ALL PARTITION powoduje wszystkich partycji indeksu o tej samej partition_number ponownie zbudowane lub zreorganizowana. Aby uzyskać więcej informacji na temat indeksów podzielonym na partycje Zobacz Tabele podzielonym na partycje i indeksów.

  • database_name
    Jest nazwą bazy danych.

  • schema_name
    To nazwa schematu, do której należy tabela lub widok.

  • table_or_view_name
    To nazwa tabela lub widoku skojarzonego z indeksu.Aby wyświetlić raport indeksów na obiekcie, należy użyć sys.Indexes Służy do wyświetlania katalogu.

  • ODBUDUJ [WITH (<rebuild_index_option > ,... n]) ]
    Określa indeks zostaną zbudowane ponownie przy użyciu tej samej kolumny, typ indeksu, atrybut unikatowości i kolejność sortowania.Tę klauzulę jest równy DBCC DBREINDEX.ODBUDOWYWANIE włącza wyłączoną indeksu.Przebudowywanie indeks klastrowany nie odbudować skojarzone ponownego zbudowania indeksów nie klastrowanych chyba że słowo kluczowe ALL jest określony.Jeśli nie zostaną określone opcje indeksu, istniejący indeks przechowywana w wartości opcji sys.Indexes są stosowane.Dla każdej opcji indeksowania którego wartość nie jest przechowywana w sys.Indexes, wskazanego w argumencie definicji opcji domyślna ma zastosowanie.

    Odbudowanie indeksu XML lub przestrzennej indeksu, opcje trybu ONLINE = ON i IGNORE_DUP_KEY = ON nie są prawidłowe.

    Jeżeli określono wartość ALL oraz tabela źródłowa jest sterty, operacja odbudowywania nie ma wpływu na tabela.Wszystkie indeksy nieklastrowany skojarzone z tabelą są zbudowane ponownie.

    Odbudowywanie operacji może być minimalny zestaw zalogowany, jeżeli rejestrowane zbiorczego lub prostego modelu odzyskiwanie bazy danych jest ustawiony.Aby uzyskać więcej informacji zobaczChoosing a Recovery Model for Index Operations.

    Uwaga

    Kiedy przebudować indeksu głównego XML, tabela użytkownika jest niedostępne na czas trwania operacji indeksu.

  • PARTYCJI
    Określa, że tylko jedna partycja indeks zostanie przebudowany lub zreorganizowana.Jeśli nie można określić PARTITION index_name nie jest indeks partycjonowany.

    PARTITION = ALL rebuilds wszystkich partycji.

  • partition_number
    Is the partition number of a partitioned index that is to be rebuilt or reorganized.partition_number is a constant expression that can reference variables.These include user-defined type variables or functions and user-defined functions, but cannot reference a Transact-SQL statement.partition_number must exist or the statement fails.

  • WITH (<single_partition_rebuild_index_option >)
    SORT_IN_TEMPDB MAXDOP i DATA_COMPRESSION są opcje, które można określić, kiedy należy ponownie utworzyć pojedynczą partycję (PARTITION = n). Indeksy XML nie można określić przy użyciu operacji odbudowywania jedną partycję.

    Przebudowywanie indeks partycjonowany nie można wykonać online.Cała tabela jest zablokowana podczas tej operacji.

  • WYŁĄCZANIE
    Oznacza indeks jako wyłączone i niedostępne do użycia przez Database Engine. Każdy indeks może być wyłączone.Definicja wyłączony indeks wskaźnika pozostaje w katalogu systemu bez podstawowych danych indeksu.Wyłączenie indeks klastrowany uniemożliwia użytkownikowi dostęp do danych źródłowych tabela.Aby włączyć indeks, należy użyć instrukcji ALTER ODBUDOWAĆ indeks lub CREATE INDEX WITH DROP_EXISTING.Aby uzyskać więcej informacji zobaczDisabling Indexes.

  • ZMIENIANIE KOLEJNOŚCI
    Określa poziom poziom liścia indeksu będzie się zreorganizowana.Tę klauzulę jest równy DBCC INDEXDEFRAG.Instrukcja ALTER REORGANIZOWAĆ indeks jest zawsze przeprowadzane online.To oznacza długoterminowe tabela blokowania blokady nie są utrzymywane i kwerendy lub aktualizuje tabela źródłowa mogą w dalszym ciągu podczas transakcji ALTER REORGANIZOWAĆ indeks.REORGANIZACJA nie mogą być określone dla wyłączony indeks lub indeks o ALLOW_PAGE_LOCKS ustawić na OFF.

  • WITH ( LOB_COMPACTION = { DALEJ | OFF } )
    Określa, że wszystkie strony, które zawierają dane dużych obiektów (LOB) są skompaktować.Typy dane LOB image, text, ntext, varchar(max), nvarchar(max), varbinary(max), a xml. Kompaktowanie danych może poprawić wykorzystania miejsca na dysku.Wartością domyślną jest włączone.

    • DALEJ
      Wszystkie strony zawierające dane dużego obiektu są skompaktować.

      Reorganizacja określony indeks klastrowany Kompaktuje wszystkie kolumny LOB, znajdujących się w indeksie klastrowanym.Reorganizacja indeks nieklastrowany Kompaktuje wszystkie LOB kolumny nonkey (włączone) w indeksie.Aby uzyskać więcej informacji zobaczTworzenie indeksów za pomocą zestawu kolumn.

      Gdy wszystko jest określony, wszystkie indeksy, które są skojarzone z określonej tabela lub widoku są zreorganizowana i wszystkie kolumny LOB, które są skojarzone z indeks klastrowany tabela źródłowa, lub nieklastrowany indeks kolumny dołączone są skompaktować.

    • WYŁĄCZANIE
      Strony zawierające dużego obiektu danych nie są skompaktować.

      OFF nie ma wpływu na sterty.

    Klauzula LOB_COMPACTION jest ignorowana, jeśli LOB kolumn, które są niedostępne.

  • SET ( <set_index option> [ ,... n] )
    Określa opcje indeksu bez przebudowywanie lub zmiana indeksu.zestaw nie może być określone dla niepełnosprawnych indeksu.

  • TABELA
    Określa, że wartość zwracaną przez funkcja zwracająca tabelę jest tabela.Wartością domyślną jest OFF.

    • DALEJ
      Do stron poziomu pośredniego indeksu jest stosowana wartość procentowa wolnego miejsca, która jest określona przez parametr FILLFACTOR.Jeśli parametr FILLFACTOR nie jest określony, a równocześnie jest włączona opcja PAD_INDEX, jest stosowana wartość współczynnika zapełnienia przechowywana w pliku sys.indexes.

    • Jeśli nie chcesz wykonać kopie zapasowe dziennika, należy użyć prostej model odzyskiwanie.fillfactor
      Strony poziom pośrednich są wypełnione bliskiej zdolności produkcyjnych.Pozostawia wystarczającej ilości miejsca dla co najmniej jeden wiersz maksymalny rozmiar że indeks może być, na podstawie zestaw kluczy na stronach pośrednich.

    Aby uzyskać więcej informacji zobacz CREATE INDEX (języka Transact-SQL).

  • FILLFACTOR = fillfactor
    Specifies a percentage that indicates how full the Database Engine should make the leaf level of each index page during index creation or alteration.fillfactor must be an integer value from 1 to 100.Wartość domyślna to 0.

    Uwaga

    Wypełnienie współczynnik wartości 0 i 100 są takie same w każdym względem.

    Określone ustawienie FILLFACTOR ma zastosowanie tylko po indeksu jest najpierw utworzony lub ponownie zbudowana.The Database Engine does not dynamically keep the specified percentage of empty space in the pages.Aby uzyskać więcej informacji zobaczCREATE INDEX (języka Transact-SQL).

    Aby wyświetlić ustawienia współczynnik wypełnienia, należy użyć sys.Indexes.

    Important noteImportant Note:

    Tworzenie lub modyfikowanie indeks klastrowany z wartością FILLFACTOR wpływa na ilość miejsca do magazynowania danych zajmuje, ponieważ Database Engine Rozkłada danych podczas tworzenia indeks klastrowany.

  • SORT_IN_TEMPDB = {ON | WYŁĄCZANIE }
    Określa, czy mają być przechowywane wyniki sortowania w tempdb.Wartością domyślną jest OFF.

    • DALEJ
      Wyniki sortowania pośrednie, które służą do konstruowania indeksu są przechowywane w tempdb.Jeśli tempdb znajduje się na inny zestaw dysków niż baza danych użytkownika, może to zmniejszyć czas potrzebny do tworzenia indeksu.Opcja NO_TRUNCATE kopia zapasowa dziennik jest równoznaczne z wpisaniem COPY_ONLY i CONTINUE_AFTER_ERROR.

    • WYŁĄCZANIE
      Bez opcji NO_TRUNCATE baza danych musi być w trybie ONLINE.

    Jeśli operacja sortowania nie jest wymagane lub sortowania mogą być wykonywane w pamięci, opcja SORT_IN_TEMPDB jest ignorowana.

    Aby uzyskać więcej informacji zobacz tempdb and Index Creation.

  • IGNORE_DUP_KEY = {W | WYŁĄCZONA}
    Określa odpowiedź o błędzie podczas próby wstawienia duplikat operację wstawiania klucz wartości do unikatowego indeksu.Opcja IGNORE_DUP_KEY dotyczy tylko wstawianie operacji po utworzeniu indeksu lub ponownie.Opcja jest ignorowany podczas wykonywania TWORZENIE INDEKSU, ZMIANA INDEKSU, or AKTUALIZACJA.Wartością domyślną jest OFF.

    • DALEJ
      Komunikat ostrzegawczy zostanie przeprowadzona, gdy zduplikowane klucz wartości są wstawiane do unikatowego indeksu.Tylko wiersze naruszenie ograniczenia unikatowości nie powiedzie się.

    • WYŁĄCZANIE
      Komunikat o błędzie będzie występować wówczas, gdy zduplikowane wartości kluczy są wstawiane do unikatowego indeksu.Całą operację WSTAWIANIA będzie można wycofać.

    Nie może być IGNORE_DUP_KEY zestaw on indeksy utworzone na widok, Indeksy nieunikatowe, indeksy XML, przestrzennej indeksy i filtrowane indeksów.

    Aby wyświetlić IGNORE_DUP_KEY, należy użyć sys.Indexes.

    W składni zgodne ze starszymi wersjami, jest równoważne Z IGNORE_DUP_KEY WITH IGNORE_DUP_KEY = ON.

  • STATISTICS_NORECOMPUTE = {W | WYŁĄCZONA}
    Określa, czy są obliczane ponownie statystyki rozkładu.Domyślnie opcja ta jest wyłączona.

    • DALEJ
      Klauzula STANDBY zapisuje gotowości danych (wykonywanie wycofywania, ale z możliwością dalsze przywraca).

    • WYŁĄCZANIE
      Za pomocą opcji STANDBY jest równoznaczne z następują przywracanie WITH STANDBY NORECOVERY WITH dla dziennik kopia zapasowa.

    Aby przywrócić statystyk automatycznych aktualizacji, zestaw STATISTICS_NORECOMPUTE do OFF, lub wykonywania aktualizacja statystyki bez klauzula NORECOMPUTE.

    Important noteImportant Note:

    Wyłączanie automatycznego recomputation statystyk dystrybucji mogą uniemożliwiać pobieranie wykonanie optymalne plany kwerend dotyczących tabela optymalizator kwerendy.

  • ONLINE**=** { ON | WYŁĄCZANIE }
    Określa, czy są dostępne do modyfikacji kwerendy i danych podczas operacji indeksu tabel i indeksów skojarzonych.Wartością domyślną jest OFF.

    Dla indeksu XML lub przestrzennej indeksu, tylko ONLINE = OFF jest obsługiwana, a jeśli ONLINE jest ustawiona na ON błąd zostanie zaokrąglona.

    Uwaga

    Są dostępne tylko w operacji indeksu online SQL Server Wersje Enterprise Developer i oceny.

    • DALEJ
      Długotrwałe blokady tabeli nie są nakładane przez czas trwania operacji indeksu.Podczas głównej fazy operacji indeksu jest nałożona tylko blokada Udostępnianie zamierzone tabeli źródłowej.Umożliwia to kontynuowanie kwerend lub aktualizacji na wewnętrznej tabeli i indeksach.W chwili rozpoczęcia operacji indeksu na obiekt źródłowy przez bardzo krótki czas jest nakładana blokada Udostępnianie.Po zakończeniu operacji na źródło jest przez bardzo krótki czas nakładana blokada Udostępnianie, o ile jest tworzony indeks nieklastrowany, pobrano blokadę Modyfikacja schematu podczas tworzenia lub upuszczania w trybie online indeksu klastrowanego bądź jest odbudowywany indeks klastrowany lub nieklastrowany.Opcji ONLINE nie można włączyć, jeśli jest tworzony indeks lokalnej tabeli tymczasowej.

    • WYŁĄCZANIE
      W takich przypadkach można pominąć te wpisy dziennika za pomocą flagi śledzenia 3226, jeśli żadna ze skryptów zależy od tych zapisów.Operację indeksu w trybie offline, która tworzy, odbudowania lub spadnie klastrowanych, przestrzennej, lub indeks XML lub odbudowania lub spadnie indeks nieklastrowany, uzyskuje blokadę schemat modyfikacji (SCH-M) w tabela.Aby uniknąć wypełnianie dziennik transakcji bazy danych, niezbędne są rutynowego tworzenia kopii zapasowych.W obszarze proste model odzyskiwanie, obcinania dziennika zostanie automatycznie po wykonanie tworzyć kopię zapasową zapasowej bazy danych oraz w pełni model odzyskiwanie, po wysłaniu tworzyć kopię zapasową zapasowej dziennik transakcji.Jednak czasami proces obcinania może być opóźnione.

    Aby uzyskać więcej informacji zobaczHow Online Index Operations Work.Aby uzyskać więcej informacji na temat blokady Zobacz Tryby blokada.

    Indeksy, w tym indeksy na tabelach tymczasowych globalne, można ponownie online z następującymi wyjątkami:

    • Indeksy wyłączone

    • Indeksy XML

    • Indeksy w lokalnych tabelach tymczasowych

    • Indeksy podzielonym na partycje

    • Stosowanie indeksów klastrowanych Jeśli tabela zawiera typy dane LOB

    • Nieklastrowany indeksy, które są zdefiniowane w dane LOB wpisz kolumn

    Ponownego zbudowania indeksów nie klastrowanych może być przebudowany online, jeśli tabela zawiera typy dane LOB, ale żadna z tych kolumn są używane w definicji indeksu, klucz lub nonkey kolumn.

  • ALLOW_ROW_LOCKS = {W | WYŁĄCZONA}
    Określa, czy są dozwolone blokady wierszy.Domyślnie opcja ta jest włączona.

    • DALEJ
      Są dozwolone blokady wierszy podczas uzyskiwania dostępu do indeksu.Program Database Engine określa, kiedy są stosowane blokady wierszy.

    • WYŁĄCZANIE
      plik rezerwowy staje się częścią bazy danych.

  • ALLOW_PAGE_LOCKS = {W | WYŁĄCZONA}
    Aby uzyskać więcej informacji zobacz sekcję "Wskazówki na używanie kolejność sortowania," w dalszej części tego tematu.Wartością domyślną jest włączone.

    • DALEJ
      Strona blokady są dozwolone po uzyskaniu dostępu indeksu.The Database Engine determines when strona locks are used.

    • WYŁĄCZANIE
      Może być za mało miejsca na dysku dla pliku stanu gotowości do wzrostu tak, że może on zawierać wszystkie różne strony z bazy danych, które zostały zmodyfikowane przez wycofywanie niezakończone transakcje.

    Uwaga

    Indeks nie może być zreorganizowana, gdy jest ALLOW_PAGE_LOCKS zestaw na OFF.

  • MAXDOP **=**max_degree_of_parallelism
    Zastępuje maksymalny stopień proste opcja konfiguracja na czas trwania operacji indeksu.Aby uzyskać więcej informacji zobaczmax degree of parallelism Option.W celu ograniczenia liczby procesorów używanych w realizacji planu równoległych, należy użyć MAXDOP.Maksymalna to 64 procesorów.

    Important noteImportant Note:

    Chociaż opcja MAXDOP składniowo jest obsługiwana dla wszystkich indeksów XML przestrzennej indeksu lub indeksu głównego XML ALTER Indeks aktualnie używa tylko jeden procesor.

    max_degree_of_parallelism może być:

    • 1
      Wyłącza generowanie planu równoległych.

    • >1
      Ogranicza maksymalną liczbę procesorów używanych w operacji indeksu równolegle do określonej liczby.

    • 0 (domyślny)
      Używa rzeczywista liczba procesorów lub mniej oparte na bieżącym obciążenia systemu.

    Aby uzyskać więcej informacji zobacz Konfigurowanie równoległa operacje indeksu.

    Uwaga

    Są dostępne tylko w operacji równoległych indeksu SQL Server Wersje Enterprise Developer i oceny.

  • DATA_COMPRESSION
    Określa opcję kompresji danych dla określonego indeksu, numer partycji lub zakres partycji.Dostępne są następujące opcje:

    • BRAK
      Nie są kompresowane indeksie lub na określonej partycji.

    • WIERSZ
      Indeks lub określone partycje są kompresowane przy użyciu kompresji wierszy.

    • strona
      Indeks lub określone partycje są kompresowane przy użyciu kompresji strona.

    Aby uzyskać więcej informacji dotyczących kompresji zobacz Creating Compressed Tables and Indexes.

  • ON PARTITIONS ( { <partition_number_expression> | <range> } [,...n] )
    Określa, do których stosuje się ustawienie DATA_COMPRESSION partycji.Jeśli indeks nie jest podzielony na partycje, argument na PARTYCJE spowoduje wystąpienie błędu.Jeśli klauzula ON PARTYCJI nie zostanie podana, opcja DATA_COMPRESSION odnosi się do wszystkich partycji indeks partycjonowany.

    <partition_number_expression> można określić w następujący sposób:

    • Podaj numer partycji, na przykład: NA PARTYCJACH (2).

    • Zapewniają kilka pojedynczych partycji, oddzielając je średnikami, na przykład numerów partycji: NA PARTYCJACH (1, 5).

    • Zapewniają zarówno zakresów, jak i poszczególnych partycji: używane przez proces kopia zapasowa online umożliwiające tworzenie kopia zapasowa bazy danych w czasie, gdy baza danych jest nadal w użyciu.

    <zakres> można określić jako liczby partycji, oddzielając słowa do, na przykład: NA PARTYCJACH (OD 6 DO 8).

    Aby zestaw różne typy kompresji danych na różnych partycjach, określ opcję DATA_COMPRESSION więcej niż jeden raz, na przykład:

    REBUILD WITH 
    (
    DATA_COMPRESSION = NONE ON PARTITIONS (1), 
    DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8), 
    DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5)
    )
    

Remarks

Nie można użyć instrukcji ALTER indeks ponownie podzielić na partycje indeks lub przenieść go na inną grupa plików.Ta instrukcja nie może być używana do modyfikacji definicji indeksu, takie jak dodawanie lub usuwanie kolumn i zmienianie kolejności kolumn.Za pomocą CREATE INDEX klauzula DROP_EXISTING do wykonywania tych operacji.

Opcja nie jest jawnie określony, jest stosowany do bieżącego ustawienia.Na przykład jeżeli nie określono ustawienie FILLFACTOR w klauzula PRZEBUDOWY, wartość współczynnik wypełnienia, przechowywanych w katalogu systemu będzie służyć w procesie odbudowywania.Aby wyświetlić bieżące ustawienia opcji indeksu, należy użyć sys.Indexes.

Uwaga

Wartości ONLINE, MAXDOP i SORT_IN_TEMPDB nie są przechowywane w katalogu systemu.Jeśli nie podano w zestawieniu indeksu, używana jest wartość domyślna dla opcji.

Na komputerach wieloprocesorowych, podobnie jak inne wykonania kwerendy automatycznie ALTER ODBUDOWAĆ indeks używa więcej procesorów do skanowania i sortowania operacje, które są skojarzone z modyfikowanie indeksu.Podczas wykonywania instrukcji ALTER REORGANIZOWAĆ indeks lub bez LOB_COMPACTION, maksymalny stopień proste wartość jednej operacji powiązanych z nią.Aby uzyskać więcej informacji zobaczKonfigurowanie równoległa operacje indeksu.

Indeks nie zreorganizowana lub ponownie, jeśli jest grupa plików, w którym znajduje się w trybie offline lub ustawiony tylko do odczytu.Jeśli słowo kluczowe ALL określono i jednego lub kilku indeksów są w trybie offline lub jest tylko do odczytu grupa plików, instrukcja nie powiedzie się.

Odbudowa indeksów

Przebudowywanie indeksu spadnie i odtwarza indeks.Usuwa fragmentacji, reclaims miejsca na dysku poprzez kompaktowanie stron, na podstawie ustawienia współczynnik wypełnienia określony lub istniejące i zmienia kolejność wierszy indeksu na sąsiadujących stronach.Kiedy wszystko jest określony, wszystkie indeksy w tabela są opuszczane, a następnie ponownie w ramach pojedynczej transakcji.klucz obcy ograniczenia nie zostanie usunięty z wyprzedzeniem.Gdy są przebudowywane indeksów z zakresów 128 lub większą, Database Engine defers deallocations rzeczywiste strona i ich skojarzone blokady, dopóki po zatwierdzeniu transakcji. Aby uzyskać więcej informacji zobaczDropping and Rebuilding Large Objects.

Uwaga

Odbudowywanie lub często reorganizacji małych indeksów nie powoduje zmniejszenia fragmentacji.Strony małych indeksy są przechowywane na mieszanych zakresów.Mieszane zakresy są współużytkowane przez maksymalnie osiem obiektów, dzięki czemu fragmentacja małych indeksu nie mogą być ograniczone po reorganizacji lub jego przebudowy.Aby uzyskać więcej informacji na temat zakresy mieszanych zobacz Opis stron i zakresów.

We wcześniejszych wersjach SQL Server, czasami można odbudować indeks nieklastrowany niespójności przyczyną awarii sprzętu. W SQL Server 2008, nadal można naprawić takich niezgodności między indeksu oraz indeks klastrowany w procesie odbudowywania nieklastrowany indeks w trybie offline. Jednak nie można naprawić niespójności indeks nieklastrowany przez przebudowywanie indeksu w trybie online, ponieważ mechanizm odbudowywania online zostanie użyty istniejący indeks nieklastrowany jako podstawa do rekonstrukcji i w ten sposób będą się powtarzać niespójność.Przebudowywanie indeksu w trybie offline, natomiast będzie wymuszać skanowanie indeks klastrowany (lub stosu) i tak usunąć niespójność.Podobnie jak w przypadku starszych wersji, zaleca się odzyskiwania z niespójności, przywracając usterce danych z kopia zapasowa; jednak można naprawić niespójności indeksu w procesie odbudowywania indeks nieklastrowany trybu offline.Aby uzyskać więcej informacji zobaczDBCC CHECKDB (języka Transact-SQL).

Reorganizacja indeksów

Reorganizacja indeks używa minimalnych zasobów systemowych.poziom liścia indeksów klastrowanych i nieklastrowany na tabele i widoki to defragmentuje przez fizycznie Zmienianie kolejności stron poziom liścia, aby dostosować logiczne, po lewej do prawej, kolejność węzłów liściowych.Również zmiana kompaktuje strony indeksu.Kompaktowanie jest oparty na istniejącym wartość współczynnik wypełnienia.Aby wyświetlić ustawienia współczynnik wypełnienia, należy użyć sys.Indexes.

Gdy wszystko jest określony, relacyjnej indeksy, grupowany i nieklastrowany, i są zreorganizowana XML indeksów w tabela.Niektóre ograniczenia stosuje się podczas określania ALL, zobacz definicję dla wszystkich sekcji argumenty.

Aby uzyskać więcej informacji zobaczReorganizing and Rebuilding Indexes.

Wyłączanie indeksów

Wyłączenie indeksu uniemożliwia użytkownikowi dostęp do indeksu, a dla indeksów klastrowanych do tabela źródłowa danych.Definicja indeksu pozostaje w katalogu systemu.Wyłączanie fizycznie nieklastrowany indeks lub indeksem klastrowanym dla widoku powoduje usunięcie danych indeksu.Wyłączenie indeks klastrowany uniemożliwia dostęp do danych, ale dane nadal unmaintained B-drzewo aż do chwili, kiedy indeksu jest usunięty lub ponownie zbudowana.Aby wyświetlić stan włączania lub wyłączania indeksu, należy zbadać is_disabled kolumnasys.Indexes Służy do wyświetlania katalogu.

Jeśli tabela znajduje się w publikacja replikacja transakcyjnej, nie można wyłączyć żadnych indeksów, które są skojarzone z kolumny klucz podstawowy.Indeksy te są wymagane przez replikację.Aby wyłączyć indeks, użytkownik musi najpierw usunąć tabela z publikacja.Aby uzyskać więcej informacji zobaczObiekty bazy danych i publikowania danych.

Aby włączyć indeks za pomocą instrukcja ALTER ODBUDOWAĆ indeks lub instrukcja CREATE INDEX WITH DROP_EXISTING.Przebudowywanie indeks klastrowany wyłączone, nie można wykonać z opcją ONLINE zestaw on.Aby uzyskać więcej informacji zobaczDisabling Indexes.

Ustawianie opcji

zestaw opcje ALLOW_ROW_LOCKS, ALLOW_PAGE_LOCKS, IGNORE_DUP_KEY i STATISTICS_NORECOMPUTE określony indeks bez przebudowywanie lub zmiana tego indeksu.Zmodyfikowane wartości są natychmiast stosowane do indeksu.Aby wyświetlić te ustawienia, należy użyć sys.Indexes.Aby uzyskać więcej informacji zobaczSetting Index Options.

Opcje blokowania stron i wierszy

Gdy ALLOW_ROW_LOCKS = ON i ALLOW_PAGE_LOCK = ON, poziomie wiersza, poziom strona i poziom tabela blokady są dozwolone podczas dostępu do indeksu.The Database Engine chooses the appropriate blokada and can escalate the blokada from a row or strona blokada to a tabela blokada.

Gdy ALLOW_ROW_LOCKS = OFF i ALLOW_PAGE_LOCK = OFF, blokada poziomie tabela jest dopuszczalna, gdy dostęp do indeksu.Aby uzyskać więcej informacji na temat konfigurowania blokowania ziarnistość indeksu zobacz Customizing Locking for an Index.

Jeśli wszystkie określono opcje blokowanie wiersza lub strona są zestaw, zestaw tings są stosowane do wszystkich indeksów.Gdy tabela jest sterty, ustawienia są stosowane w następujący sposób:

ALLOW_ROW_LOCKS = ON lub OFF

Aby sterty i wszystkie skojarzone ponownego zbudowania indeksów nie klastrowanych.

ALLOW_PAGE_LOCKS = DALEJ

Aby sterty i wszystkie skojarzone ponownego zbudowania indeksów nie klastrowanych.

ALLOW_PAGE_LOCKS = WYŁĄCZONE

Pełni do ponownego zbudowania indeksów nie klastrowanych.Oznacza to, że wszystkie blokady strona nie są dozwolone w ponownego zbudowania indeksów nie klastrowanych.Na stosie tylko udostępnione (S), aktualizacja (U) i blokad wyłączności (X) strona nie są dozwolone.The Database Engine can still acquire an intent strona blokada (IS, IU or IX) for internal purposes.

Aby uzyskać więcej informacji zobaczeskalacja blokad (aparat bazy danych).

: h

Kiedy przebudowywanie indeksu i opcji ONLINE jest ustawiony na wartość ON, znajdujące się pod nim obiekty, tabele i indeksy skojarzone, są dostępne do modyfikacji danych i kwerendy.Blokady do wyłącznego tabela są przechowywane tylko w przypadku bardzo krótkim czas w trakcie procesu zmiany.

Reorganizacja indeks jest zawsze przeprowadzane online.Proces nie przechowuje blokad długim okresie i dlatego nie blokuje kwerendy lub aktualizacji, które są uruchomione.

Można wykonać operacji jednoczesnych online indeksu w tej samej tabela, tylko gdy wykonaj następujące czynności:

  • Tworzenie wielu ponownego zbudowania indeksów nie klastrowanych.

  • Reorganizacja różnych indeksów dla tej samej tabela.

  • Reorganizacja różnych indeksów podczas przebudowywanie nonoverlapping indeksów dla tej samej tabela.

Wszystkie inne operacje online indeksu wykonywane w tym samym czasie zakończyć się niepowodzeniem.Na przykład można odbudować jednocześnie dwa lub więcej indeksów dla tej samej tabela, ani tworzony nowy indeks podczas przebudowywanie istniejący indeks dla tej samej tabela.

Aby uzyskać więcej informacji zobaczWykonywanie operacji indeks w trybie online.

Przestrzennej ograniczenia indeksu

Gdy odbudować indeks przestrzennej, tabela podstawowej użytkownika jest niedostępne na czas trwania operacji indeksu, ponieważ przestrzennej indeks posiada blokadę schematu.

Ograniczenia klucz podstawowy tabela użytkowników nie mogą być modyfikowane podczas przestrzennej indeksu jest zdefiniowana kolumna tej tabela.Aby zmienić ograniczenia klucz podstawowy, upuść co przestrzennej indeks tabela.Po zmodyfikowaniu ograniczenie klucz podstawowy, możesz odtworzyć każdego przestrzennej indeksów.

W jednej partycji odbudować operacji, można określać żadnych indeksów przestrzennej.Jednak w odbudowywania pełną partycji można określić przestrzennej indeksów.

Aby zmienić opcje, które są specyficzne dla przestrzennej indeksu, takie jak BOUNDING_BOX lub Siatka, można użyć instrukcja CREATE INDEX PRZESTRZENNEJ, która określa DROP_EXISTING = ON, lub usunąć przestrzennej indeks i Utwórz nową.Aby zapoznać się z przykładem zobacz CREATE SPATIAL INDEX (Transact-SQL).

Kompresja danych

Aby uzyskać więcej informacji dotyczących kompresji danych zobacz Creating Compressed Tables and Indexes.

Aby ocenić, jak zmiana stanu kompresji wpłynie na tabela, indeks lub partycji, należy użyć sp_estimate_data_compression_savings procedura przechowywana.

Indeksów podzielonym na partycje, obowiązują następujące ograniczenia:

  • Po użyciu instrukcji ALTER ALL indeks... , Nie można zmienić kompresji ustawienie jedną partycję, gdy tabela zawiera indeksy nonaligned.

  • Indeks ALTER <Indeks> ... REBUILD PARTITION ...syntax rebuilds the specified partition of the index.

  • Indeks ALTER <Indeks> ... REBUILD WITH ...syntax rebuilds all partitions of the index.

Uprawnienia

ALTER indeks, należy wykonać co najmniej, wymagane jest uprawnienie ALTER na tabela lub widoku.

Przykłady

A.Odbudowywanie indeksu

W poniższym przykładzie odtwarza pojedynczy indeks na Employee Tabela.

B.Odbudowywanie wszystkich indeksów w tabela i określając opcje

W poniższym przykładzie Określa słowo kluczowe ALL. To buduje ponownie wszystkie indeksy skojarzone z tabelą.Podano trzy opcje.

C.Zmiana indeksu z kompaktowania w systemie LOB

W poniższym przykładzie Reorganizuje jeden indeks klastrowany.Ponieważ indeks zawiera typ dane LOB na poziomie poziom liścia, instrukcja również Kompaktuje wszystkie strony, które zawierają dane dużego obiektu.Należy zauważyć, że określenie opcji WITH (LOB_COMPACTION) nie jest wymagane, ponieważ wartość domyślna jest włączone.

D.Ustawianie opcji na indeks

Poniższy przykład przedstawia kilka opcji, w indeksie AK_SalesOrderHeader_SalesOrderNumber.

E.Wyłączanie indeksu

Następujący przykład wyłącza indeks nieklastrowany na Employee Tabela.

F.Wyłączanie ograniczenia

Następujący przykład wyłącza ograniczenia klucz podstawowy, wyłączając indeksu klucz podstawowy.Ograniczenia klucz obcy dla tabela podstawowej jest automatycznie wyłączane i wyświetlany jest komunikat ostrzegawczy.

Zestaw wyników zwraca komunikat ostrzegawczy.

Ostrzeżenie: Obcego klucz 'FK_EmployeeDepartmentHistory_Department_DepartmentID „

w tabela 'EmployeeDepartmentHistory' odwołującego się do tabela „ dział"

został wyłączony z powodu wyłączania indeksu "PK_Department_DepartmentID".

G.Włączenie ograniczenia

Poniższy przykład włącza ograniczenia klucz podstawowy i klucz obcy, które zostały wyłączone w przykładzie F.

Ograniczenia klucz podstawowy jest włączony, przebudowywanie indeksu klucz podstawowy.

klucz obcy ograniczenie to jest włączone.

H.Przebudowywanie indeks partycjonowany

Poniższy przykład buduje ponownie jedną partycję, numer partycji 5, indeks partycjonowany IX_TransactionHistory_TransactionDate. W tym przykładzie przyjęto założenie, próbka podzielonym na partycje indeksu został zainstalowany.Informacje dotyczące instalacji zobacz Readme_PartitioningScript.

USE AdventureWorks;
GO
-- Verify the partitioned indexes.
SELECT *
FROM sys.dm_db_index_physical_stats (DB_ID(),OBJECT_ID(N'Production.TransactionHistory'), NULL , NULL, NULL);
GO
--Rebuild only partition 5.
ALTER INDEX IX_TransactionHistory_TransactionDate
ON Production.TransactionHistory
REBUILD Partition = 5;
GO

I.Zmiana ustawienia kompresji indeksu

Poniższy przykład buduje ponownie indeks dla tabela nonpartitioned.

ALTER INDEX IX_INDEX1 
ON T1
REBUILD 
WITH ( DATA_COMPRESSION = PAGE )
GO

Dodatkowe dane kompresji przykłady można znaleźć w temacie Creating Compressed Tables and Indexes.

Historia zmian

Microsoft Learning

Usuwanie indeksów wyłączone z indeksy, które się nie powieść z REORGANIZACJA.