Zmiana INDEKSU (Transact-SQL)

Modyfikuje istniejącą tabela lub widok indeksu (relacyjnej lub XML) przez wyłączenie, przebudowy lub reorganizacji indeksu; lub ustawiając opcje w indeksie.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

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
    Jest to nazwa indeksu.Nazwy indeksów muszą być unikatowe w tabela lub widoku, ale nie muszą być unikatowe w bazie danych.Nazwy indeksów muszą spełniać zasady z identyfikatorów.

  • ALL
    Określa wszystkie indeksy skojarzone z tabela lub widoku, niezależnie od typu indeksu.Określenie wszystkich powoduje instrukcja kończy się niepowodzeniem, jeśli jednego lub kilku indeksów są 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.Poniższa tabela zawiera listę operacji indeksu i Niedozwolone typy indeksu.

    Określanie wszystko za pomocą tej operacji

    Jeśli tabela ma jedną lub więcej

    ODBUDUJ Z ONLINE = ON

    Indeks XML

    Indeks przestrzenny

    Typ kolumny danych dużego obiektu image, text, ntext, varchar(max), nvarchar(max), varbinary(max), and xml

    ODBUDUJ PARTYCJI =partition_number

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

    REORGANIZOWANIE

    Indeksy z ALLOW_PAGE_LOCKS zestaw na OFF

    REORGANIZACJA PARTITION =partition_number

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

    IGNORE_DUP_KEY = ON

    Indeks przestrzenny

    Indeks XML

    ONLINE = ON

    Indeks przestrzenny

    Indeks XML

    Jeśli wszystko jest określany za pomocą PARTYCJI = partition_number, wszystkie indeksy muszą być wyrównany.Oznacza to, że one oddzielone od siebie oparta na funkcjach równoważne partycji.Przy użyciu wszystkich PARTYCJI powoduje wszystkich partycji indeksu o tej samej partition_number przebudowany lub zmieniono ich organizację.Aby uzyskać więcej informacji na temat indeksów podzielonym na partycje, zobacz Podzielonym na partycje tabel i indeksów.

  • database_name
    Jest to nazwa bazy danych.

  • schema_name
    Jest to nazwa schematu, do której należy dany tabela lub widoku.

  • table_or_view_name
    Jest nazwą tabela lub widoku skojarzonego z indeksu.Aby wyświetlić raport indeksy dla obiektu, użyj sys.indexes katalogu widoku.

  • ODBUDUJ [WITH (<)rebuild_index_option> [ ,... n]) ]
    Określa, że indeks zostanie przebudowany przy użyciu tej samej kolumny, typ indeksu, unikatowości atrybuti kolejność sortowania.Tę klauzula jest równoznaczne z dbcc dbreindex.ODBUDUJ umożliwia wyłączony indeks.Przebudowywanie indeks klastrowany nie odbudować skojarzone zbudowania indeksów nie klastrowanych chyba że wszystkie określone słowo kluczowe.Jeśli nie określono opcji indeks istniejący indeks opcji wartości przechowywanych w sys.indexes są stosowane.Dla dowolnej opcji indeksu, których wartość nie jest przechowywana w sys.indexes, stosuje się domyślną wskazanych w definicji argument opcji.

    Kiedy odbudować indeks XML lub indeks przestrzennej, opcje trybu ONLINE = ON i IGNORE_DUP_KEY = ON nie są prawidłowe.

    Jeśli wszystkie określone sterty jest podstawowej tabela , operacja rebuild nie ma wpływu na tabela.Odbudowa wszelkie ponownego zbudowania indeksów skojarzonych z tabela .

    Operacja rebuild można rejestrować minimalny Jeśli modelu odzyskiwanie bazy danych jest zestaw na bulk-logged lub proste.Aby uzyskać więcej informacji, zobacz Wybieranie modelu odzyskiwania dla operacji indeksu.

    Ostrzeżenie

    Odbudować indeks główny XML użytkownika podstawowej tabela jest niedostępny przez czas trwania operacji indeksu.

  • PARTYCJA
    Określa, że tylko jedna partycja indeks zostanie przebudowany lub zmieniono ich organizację.Nie można określić PARTYCJĘ, jeśli index_name nie jest indeks partycjonowany.

    PARTYCJA = wszystkie rebuilds wszystkie partycje.

  • partition_number
    Jest numerem partycji indeks partycjonowany , który ma zostać odbudowany lub zmieniono ich organizację.partition_numberjest stała wyrażenie , które można odwoływać się do zmiennych.Te obejmują zmienne typ zdefiniowany przez użytkownika lub funkcji i funkcje zdefiniowane przez użytkownika, ale nie można odwoływać się Transact-SQL instrukcja.partition_number musi istnieć lub instrukcja nie powiedzie się.

  • Z (<)single_partition_rebuild_index_option>)
    SORT_IN_TEMPDB, MAXDOP i DATA_COMPRESSION są opcje, które można określić, kiedy ponownie utworzyć pojedynczą partycję (PARTITION = n).Indeksy XML nie można określić w operację rekonstrukcji jednej partycji.

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

  • WYŁĄCZ
    Oznacza indeks jako wyłączone i niedostępne do użycia przez Aparat baz danych.Można wyłączyć wszelkie indeksu.Definicja indeksu wyłączony indeks pozostaje w katalogu systemu bez podstawowych danych indeksu.Wyłączenie indeks klastrowany uniemożliwia dostęp użytkownika do podstawowych danych tabela .Aby włączyć indeksowanie, należy użyć ALTER ODBUDOWAĆ indeks lub utworzyć indeks Z DROP_EXISTING.Aby uzyskać więcej informacji, zobacz Wyłączanie indeksów.

  • REORGANIZOWANIE
    Określa, że będzie zmieniono ich organizację liśćindeksupoziom . Tę klauzula jest równoznaczne z dbcc indexdefrag.ZMIENIA REORGANIZOWAĆ INDEKSU instrukcja jest zawsze przeprowadzane online.Oznacza to długoterminowe blokowania blokady tabela nie są aktywne i aktualizacje do podstawowej tabela lub kwerendy, można kontynuować podczas transakcji ZMIENIA REORGANIZOWAĆ INDEKSU.REORGANIZACJA nie można określić dla wyłączony indeks lub indeks o ALLOW_PAGE_LOCKS zestaw na OFF.

  • Z ( ) LOB_COMPACTION = { na | OFF } )
    Określa, że wszystkie strony, które zawierają dane dużego obiektu (LOB) są skompaktować.The LOB data types are image, text, ntext, varchar(max), nvarchar(max), varbinary(max), and xml.Kompaktowanie danych może poprawić wykorzystanie miejsca na dysku.Domyślnie jest włączone.

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

      Reorganizowanie określony indeks klastrowany Kompaktuje wszystkie kolumny LOB, które są zawarte w indeks klastrowany.Reorganizowanie indeks nieklastrowany Kompaktuje wszystkie kolumny LOB, które są kolumnami (dołączone) w indeksie.Aby uzyskać więcej informacji, zobacz Tworzenie indeksów z uwzględnionych kolumn.

      Po określeniu wszystkich pociągają za sobą przenoszenie wszystkie indeksy, które są skojarzone z określoną tabela lub widok, a wszystkie kolumny LOB, które są skojarzone z indeks klastrowany, podstawowej tabelalub indeks nieklastrowany z uwzględnionych kolumn są skompaktować.

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

      Wyłącz nie ma wpływu na sterty.

    LOB_COMPACTION klauzula jest ignorowany, jeśli nie ma kolumn LOB.

  • SET ( <set_index option> [ ,... n] )
    Określa opcje indeksu bez reorganizowanie indeksu lub udoskonaleniem.Nie można określić zestawu wyłączony indeks.

  • PAD_INDEX = {ON | OFF}
    Określa indeks uzupełnienie.Domyślnie jest wyłączona.

    • NA
      Procent wolnego miejsca, określonego przez parametr FILLFACTOR jest stosowany do stronypoziom pośredniego - indeksu.Jeśli FILLFACTOR nie jest określona w tym samym czas PAD_INDEX jest zestaw na wartość współczynnik wypełnienia , przechowywane w sys.indexes jest używana.

    • Wyłączanie lub fillfactor nie jest określony
      Stronypoziom pośredniego - są wypełnione bliskiej zdolności produkcyjnych.Pozostawia wystarczająco dużo miejsca dla co najmniej jeden wiersz maksymalny rozmiar, które mogą być indeksu, oparte na zestaw kluczy na stronach pośrednie.

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

  • FILLFACTOR =fillfactor
    Określa wartość procentową, która wskazuje, jak pełne Aparat baz danych należy ustawić liść poziom każdej strona indeksu podczas tworzenia indeksu lub zmianą.fillfactormusi mieć wartość całkowitą od 1 do 100.Wartość domyślna to 0.

    Ostrzeżenie

    Wartości współczynnika wypełnienia 0 i 100 są takie same pod każdym względem.

    Określone ustawienie FILLFACTOR ma zastosowanie tylko gdy indeks jest najpierw tworzone lub przebudowany.Aparat baz danych Nie dynamicznie zachować określony procent wolnego miejsca w stronach.Aby uzyskać więcej informacji, zobacz CREATE INDEX (Transact-SQL).

    Aby wyświetlić ustawienie współczynnik wypełnienia , użyj sys.indexes.

    Ważna informacjaWażne:

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

  • SORT_IN_TEMPDB = {ON | OFF }
    Określa, czy do przechowywania Sortuj wyniki w tempdb.Domyślnie jest wyłączona.

    • NA
      Pośrednie sortowania wyniki , używany do tworzenia indeksu są przechowywane w tempdb.Jeśli tempdb jest na inny zestaw dysków baza danych użytkownika, to może zmniejszyć czas potrzebny do tworzenia indeksu.Jednak zwiększa ilość miejsca na dysku, który jest używany podczas budowania indeksu.

    • WYŁĄCZANIE
      Pośrednie Sortuj wyniki są przechowywane w tej samej bazy danych jako indeks.

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

    Aby uzyskać więcej informacji, zobacz tempdb i tworzenie indeksu.

  • IGNORE_DUP_KEY = {ON | OFF}
    Określa odpowiedź błąd podczas operacji wstawiania spróbuje wstawić wartości zduplikowany klucz do indeks unikatowy.Opcja IGNORE_DUP_KEY dotyczy tylko wstawianie operacji po utworzeniu indeksu lub przebudowanych.Opcja nie ma wpływu podczas wykonywania CREATE INDEX, Zmianę INDEKSU, lub Aktualizacja.Domyślnie jest wyłączona.

    • NA
      Komunikat ostrzegawczy ma miejsce, gdy wartości zduplikowanych klucz są wstawiane do indeks unikatowy.Tylko wiersze naruszenie ograniczenia unikatowości nie powiedzie się.

    • WYŁĄCZANIE
      Komunikat o błędzie ma miejsce, gdy wartości zduplikowanych klucz są wstawiane do indeks unikatowy.Cała operacja WSTAWIANIA zostanie wycofana.

    IGNORE_DUP_KEY nie może być zestaw na indeksy utworzone na widok, indeksów — unikatowy, indeksy XML, indeksy przestrzenne i filtrowane indeksy.

    Służy do wyświetlania IGNORE_DUP_KEY, sys.indexes.

    Składnia zgodna z poprzednimi wersjami, Z IGNORE_DUP_KEY jest równoważne Z IGNORE_DUP_KEY = ON.

  • STATISTICS_NORECOMPUTE = {ON | OFF}
    Określa, czy są przeliczane statystyk dystrybucji.Domyślnie jest wyłączona.

    • NA
      Poza-o-data statystyki nie są automatycznie przeliczane.

    • WYŁĄCZANIE
      Statystyka automatyczne aktualizowanie są włączone.

    Aby przywracanie Statystyka automatyczne aktualizowanie, zestaw STATISTICS_NORECOMPUTE na OFF lub wykonać aktualizacji statystyk bez NORECOMPUTE klauzula.

    Ważna informacjaWażne:

    Wyłączanie automatycznego recomputation statystyk dystrybucji może uniemożliwić pobrania optymalnej realizacji planów kwerend, które mogą obejmować tabela optymalizator kwerendy .

  • ONLINE = { ON | OFF }
    Określa, czy tabele podstawowe i indeksy skojarzone są dostępne do modyfikacji kwerendy i danych podczas operacji indeksu.Domyślnie jest wyłączona.

    Indeks XML lub indeks przestrzenny ONLINE tylko = OFF jest obsługiwany i ONLINE jest zestaw na spowodował błąd.

    Ostrzeżenie

    Operacje indeksu online są dostępne tylko w SQL Server wersji Enterprise, Developer i oceny.

    • NA
      Długoterminowe blokady tabela nie są aktywne przez czas trwania operacji indeksu.Główne fazie operacji indeksu tylko intencji udziału (IS) blokada jest używana wtabela źródło. Dzięki temu kwerendy lub aktualizacje z tabela i indeksy, aby kontynuować.W momencie rozpoczęcia operacji udostępnione (S) blokada bardzo krótko przechowywanych w obiektu źródło .Na końcu operacji s blokada bardzo krótko jest używana na źródło Jeśli tworzony jest indeks nieklastrowany lub SCH-M (modyfikacja schematu) blokada jest nabyte podczas tworzenia indeks klastrowany lub porzucone w trybie online lub gdy klastrowany lub indeks nieklastrowany są przebudowywane.ONLINE nie można zestaw na po utworzeniu indeks w lokalnej tabelatymczasowej.

    • WYŁĄCZANIE
      Blokady tabeli są stosowane na czas trwania operacji indeksu.Operację indeks w trybie offline, która tworzy, odbudowania lub porzuca klastrowanym, przestrzennej, lub indeks XML lub odbudowania lub porzuca indeks nieklastrowany, nabywa modyfikacji (Sch-M) schematu blokada w tabela.Uniemożliwia to dostęp użytkownika do odpowiedniej tabela , na czas trwania operacji.Operacja indeks w trybie offline, który tworzy indeks nieklastrowany nabywa udostępnione (S) blokada w tabela.Zapobiega aktualizacji do podstawowej tabela , ale zezwala na operacje odczytu, takich jak instrukcje SELECT.

    Aby uzyskać więcej informacji, zobacz Jak Online pracy operacji indeksu.Aby uzyskać więcej informacji na temat blokady zobacz Tryby Lock.

    Indeksy, łącznie z indeksów na globalne tabel tymczasowych można zrekonstruować online z następującymi wyjątkami:

    • Indeksy XML

    • Indeksy w lokalnych tabelach tymczasowych

    • podzbiór indeks partycjonowany (całego indeks partycjonowany można zrekonstruować online.)

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

    • Kolumny wpisz zbudowania indeksów, które są zdefiniowane przy użyciu dane LOB

    Ponownego zbudowania indeksów można zrekonstruować online, jeśli tabela zawiera typy dane LOB, ale żadna z tych kolumn są używane w definicji indeksu jako klucz lub kolumnami.

  • ALLOW_ROW_LOCKS = { ON | OFF}
    Określa, czy wiersz blokady są dozwolone.Domyślnie jest włączone.

    • NA
      Blokady wiersza są dozwolone podczas uzyskiwania dostępu do indeksu.Aparat baz danych Określa, kiedy są używane wiersza blokad.

    • WYŁĄCZANIE
      Wiersz blokady nie są używane.

  • ALLOW_PAGE_LOCKS = { na | OFF}
    Określa, czy dozwolone są strona blokad.Domyślnie jest włączone.

    • NA
      Blokady strony są dozwolone podczas dostępu do indeksu.Aparat baz danych Określa, kiedy są używane strona blokad.

    • WYŁĄCZANIE
      Strona blokady nie są używane.

    Ostrzeżenie

    Indeks nie może być zmieniono ich organizację, gdy ALLOW_PAGE_LOCKS jest zestaw na wyłączone.

  • MAXDOP **=**max_degree_of_parallelism
    Zastępuje maksymalny stopień równoległości prostychopcjakonfiguracja na czas trwania operacji indeksu. Aby uzyskać więcej informacji, zobacz maksymalny stopień równoległości prostych opcji.MAXDOP służą do ograniczania liczby procesorów używanych w realizacji planu równoległego.Maksymalna to 64 procesorów.

    Ważna informacjaWażne:

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

    max_degree_of_parallelismmoże być:

    • 1
      Pomija generowanie planu równoległego.

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

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

    Aby uzyskać więcej informacji, zobacz Konfigurowanie operacji równoległych indeksu.

    Ostrzeżenie

    Indeksu równoległa operacje są dostępne tylko w SQL Server wersji 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
      Indeks lub określonej partycji nie są kompresowane.

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

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

    Aby uzyskać więcej informacji dotyczących kompresji, zobacz Tworzenie skompresowanego tabel i indeksów.

  • NA PARTYCJACH () { <partition_number_expression> | <zakres>} , ...n**)**
    Określa partycje, do których stosuje się ustawienie DATA_COMPRESSION.Jeśli indeks nie jest podzielony na partycje, argument na PARTYCJE spowoduje wystąpienie błędu.Jeśli na PARTYCJI klauzula nie zostanie podana, opcja DATA_COMPRESSION stosuje 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 poszczególnych partycji rozdzielonych przecinkami, na przykład numery partycji: NA PARTYCJACH (1, 5).

    • Zapewniają zakresy i poszczególnych partycji: NA PARTYCJACH (2, 4, 6-8).

    <zakres> może być określona jako liczby partycji, oddzielając wyraz, na przykład: NA PARTYCJACH (6-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)
    )
    

Uwagi

ZMIANĘ INDEKSU nie można ponownie podzielić na partycje indeks lub przenieść do innej grupa plików.Ta instrukcja nie można zmodyfikować definicję indeksu, takie jak dodawanie lub usuwanie kolumn lub zmiana kolejności kolumna .Należy utworzyć indeks z DROP_EXISTING klauzula do wykonania tych operacji.

Gdy opcja nie jest wyraźnie określony, bieżące ustawienie jest stosowane.Na przykład jeśli nie określono ustawienia FILLFACTOR w REKONSTRUKCJI klauzula, podczas procesu rekonstrukcji zostanie użyta wartość współczynnik wypełnienia przechowywanych w katalogu system.Aby wyświetlić bieżące ustawienia opcji indeks, użyj sys.indexes.

Ostrzeżenie

Wartości ONLINE, MAXDOP i SORT_IN_TEMPDB nie są przechowywane w katalogu system.O ile nie określono w indeksie instrukcja, używana jest wartość domyślna dla opcji.

Na komputerach wieloprocesorowych, podobnie jak innych kwerend automatycznie ZMIENIA ODBUDOWAĆ indeks używa więcej procesorów do skanowania i sortowania operacje, które są skojarzone z modyfikowanie indeksu.Po uruchomieniu ALTER REORGANIZOWAĆ INDEKSU z lub bez LOB_COMPACTION, maksymalny stopień równoległości prostych wartość jednej operacji powiązanych.Aby uzyskać więcej informacji, zobacz Konfigurowanie operacji równoległych indeksu.

Indeks nie zmieniono ich organizację lub przebudowanych, jeśli grupa plików , w którym znajduje się jest w trybie offline lub zestaw tylko do odczytu.Gdy wszystkie określone słowo kluczowe i jednego lub kilku indeksów są w trybie offline lub jest tylko do odczytu grupa plików, instrukcja nie powiedzie się.

Odbudowywanie indeksów

Przebudowywanie indeksu spadnie i odtwarza indeks.Usuwa fragmentacji, ta ilość miejsca na dysku poprzez kompaktowanie stron na podstawie ustawienia określonego lub istniejący współczynnik wypełnienia i zmienia kolejność wierszy indeksu na sąsiadujących stronach.Kiedy wszystkie określone wszystkie indeksy tabela są opuszczane, a następnie przebudowany w ramach pojedynczej transakcji.Ograniczenia klucza OBCEGO nie trzeba wcześniej usunięty.Gdy Odbudowa indeksów z zakresów 128 lub więcej Aparat baz danych podporządkowuje deallocations rzeczywista strona i ich skojarzone blokady, aż po zatwierdzenia transakcji.Aby uzyskać więcej informacji, zobacz Upuszczanie i odbudowując dużych obiektów.

Ostrzeżenie

Reorganizacja często indeksy małych lub udoskonaleniem 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 tak fragmentacji w indeksie małych nie może być obniżona po reorganizacji lub przebudowy go.Aby uzyskać więcej informacji o mieszanych zakresów, zobacz Opis stron i zakresów.

W starszych wersjach SQL Server, może czasami odbudować indeks nieklastrowany niespójności przyczyną awarii sprzętu.W SQL Server 2008, może nadal mieć możliwość naprawy takich niezgodności między indeks i indeks klastrowany przez odbudowanie indeks nieklastrowany w trybie offline.Jednakże nie może naprawić niespójności indeks nieklastrowany przez odbudowanie indeksu w trybie online, ponieważ mechanizm Odbuduj online zostanie użyty istniejący indeks nieklastrowany jako podstawa dla rekonstrukcji i dlatego utrzymują niespójność.Przebudowywanie indeksu w trybie offline, natomiast będzie wymuszać skanowanie indeks klastrowany (lub sterty) i tak usunąć niespójność.Jako ze starszymi wersjami, zalecamy odzyskiwania z niespójności, przywracając dotyczy danych z kopia zapasowa; można jednak naprawić niespójności indeksu przez odbudowanie indeks nieklastrowany w trybie offline.Aby uzyskać więcej informacji, zobacz DBCC CHECKDB (Transact-SQL).

Reorganizowanie indeksów

Reorganizowanie indeks używa minimalnych zasobów systemowych.liśćpoziom indeksy klastrowane i nieklastrowany na tabele i widoki defragmentacji fizycznie kolejności liść-poziom strony odpowiadają logicznym, od lewej do prawej strony, kolejność węzłów liść . Również reorganizacji kompaktuje stron indeksowych.Kompaktowanie opiera się na istniejącą wartość współczynnik wypełnienia .Aby wyświetlić ustawienie współczynnik wypełnienia , użyj sys.indexes.

Podczas wszystkich jest określony, relacyjnej indeksy klastrowane i nieklastrowanym, i pociągają za sobą przenoszenie XML indeksów w tabela .Niektóre ograniczenia stosuje się podczas określania wszystkich, zobacz definicję dla wszystkich sekcji argumenty.

Aby uzyskać więcej informacji, zobacz Reorganizowanie i odbudowa indeksów.

Wyłączanie indeksów

Wyłączenie indeksu uniemożliwia dostęp użytkownika do indeksu i indeksów klastrowanych w danych Yródłowych tabela .Definicja indeksu pozostaje w katalogu system.Wyłączanie fizycznie indeks nieklastrowany lub indeks klastrowany w widoku powoduje usunięcie danych indeksu.Wyłączenie indeks klastrowany uniemożliwia dostęp do danych, ale dane pozostaną unmaintained w B-drzewo do momentu porzucone lub przebudowanych indeksu.Aby wyświetlić stan włączone lub wyłączony indeks, kwerenda is_disabled kolumna w sys.indexes katalogu widoku.

Jeśli tabela znajduje się w replikacjatransakcyjnejpublikacja, nie można wyłączyć wszystkie indeksy, które są skojarzone z kolumny klucz podstawowego. Indeksy te są wymagane przez replikacja.Aby wyłączyć indeksu, należy najpierw usunąć tabela z publikacja.Aby uzyskać więcej informacji, zobacz Publikowanie danych i obiektów bazy danych.

Użyj ALTER ODBUDOWAĆ indeks instrukcja lub utworzyć indeks Z DROP_EXISTING instrukcja , aby włączyć indeks.Odbudowywanie wyłączone indeks klastrowany nie można wykonać z opcji ONLINE zestaw na.Aby uzyskać więcej informacji, zobacz Wyłączanie indeksów.

Ustawianie opcji

Można zestaw opcje ALLOW_ROW_LOCKS, ALLOW_PAGE_LOCKS, IGNORE_DUP_KEY i STATISTICS_NORECOMPUTE określony indeks bez odbudowy lub reorganizacji pozycji tego indeksu.Zmodyfikowane wartości są natychmiast zastosowane do indeksu.Aby wyświetlić te ustawienia, użyj sys.indexes.Aby uzyskać więcej informacji, zobacz Ustawianie opcji indeksu.

Wiersz i opcje blokady strony

Gdy ALLOW_ROW_LOCKS = ON i ALLOW_PAGE_LOCK = ON wierszapoziom, strona-poziomi tabela-poziom blokady są dozwolone podczas dostępu do indeksu.Aparat baz danych Wybiera odpowiedni blokada i może eskalować blokada z rzędu lub stronablokada tabelablokada.

Gdy ALLOW_ROW_LOCKS = OFF i ALLOW_PAGE_LOCK = OFF tylko tabela-poziom blokada jest dopuszczalna, gdy dostęp do indeksu.Aby uzyskać więcej informacji o konfigurowaniu blokowania ziarnistość indeksu, zobacz Dostosowywanie blokowania indeksu.

Jeżeli określono wszystkie przy opcjiblokada rzędu lub stronasą zestaw, ustawienia 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 oraz wszystkie skojarzone zbudowania indeksów nie klastrowanych.

ALLOW_PAGE_LOCKS = ON

Aby sterty oraz wszystkie skojarzone zbudowania indeksów nie klastrowanych.

ALLOW_PAGE_LOCKS = WYŁĄCZONE

Pełni do zbudowania indeksów.Oznacza to, wszystkie strona blokady nie są dozwolone w zbudowania indeksów.Na stercie tylko udostępnione (S), aktualizacji (U) i blokad wyłączności (X) dla strona nie są dozwolone.Aparat baz danych Można nadal uzyskać konwersji stronablokada (IS, IU lub IX) dla wewnętrznych celów.

Aby uzyskać więcej informacji, zobacz Eskalację blokady (aparat bazy danych).

Operacji indeksu online

Gdy odbudowanie indeksu i opcja ONLINE jest zestaw na, obiektów, tabel i indeksy skojarzone są dostępne do modyfikacji kwerendy i danych.tabela blokady są aktywne tylko w bardzo krótkim czas w trakcie procesu zmian.

Reorganizowanie indeks jest zawsze przeprowadzane online.Proces nie przechowuje blokad w długim okresie i dlatego nie nie blok kwerend lub aktualizacji, które są uruchomione.

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

  • Tworzenie wielu zbudowania indeksów nie klastrowanych.

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

  • Reorganizowanie różnych indeksy podczas przebudowywania porządkuje indeksów dla tej samej tabela.

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

Aby uzyskać więcej informacji, zobacz Wykonywanie operacji indeks w trybie Online.

Ograniczenia przestrzenne indeksu

Gdy odbudować indeks przestrzenny użytkownika podstawowej tabela jest niedostępna na czas trwania operacji indeksu, ponieważ indeks przestrzenny posiada schematu blokada.

Ograniczenie klucza podstawowego w tabela użytkowników nie mogą być modyfikowane podczas przestrzennej indeks jest zdefiniowany w kolumna tej tabela.Aby zmienić ograniczenie klucza podstawowego, najpierw upuść co przestrzennej indeks tabela.Po zmodyfikowaniu ograniczenie klucza podstawowego, można odtworzyć każdego przestrzennej indeksy.

W jedną partycję odbudować operacji, nie można określić żadnych indeksów przestrzennych.Jednak w rekonstrukcji pełną partycji można określić indeksy przestrzenne.

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

Kompresja danych

Aby uzyskać informacje o kompresji danych, zobacz Tworzenie skompresowanego tabel i indeksów.

Aby ocenić, jak zmiana stanu kompresji będą wpływać na tabela, indeks lub partycji, należy użyć sp_estimate_data_compression_savings procedura składowana.

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

  • Podczas korzystania z ZMIENIA wszystkie INDEKSU..., nie można zmienić ustawienie kompresji jedną partycję, jeśli tabela zawiera indeksy nonaligned.

  • Indeks ZMIENIA <indeksu> ...ODBUDUJ PARTYCJI...Składnia przebudowuje określonej partycji indeksu.

  • Indeks ZMIENIA <indeksu> ...ODBUDUJ Z...Składnia buduje ponownie wszystkich partycji indeksu.

Uprawnienia

wykonać zmianę INDEKSU minimum wymagane jest uprawnienie ALTER na tabela lub widoku.

Przykłady

A.Przebudowywanie indeksu

Poniższy przykład odtwarza pojedynczy indeks na Employee tabela.

USE AdventureWorks2008R2;
GO
ALTER INDEX PK_Employee_BusinessEntityID ON HumanResources.Employee
REBUILD;
GO

B.Odbudowywanie wszystkie indeksy na tabela i określając opcje

W następującym przykładzie określono słowa kluczowego ALL.Przebudowuje indeksy wszystkich skojarzonych z tabela.Podano trzy opcje.

USE AdventureWorks2008R2;
GO
ALTER INDEX ALL ON Production.Product
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,
              STATISTICS_NORECOMPUTE = ON);
GO

C.Reorganizowanie indeks z obiektu LOB zagęszczania

Poniższy przykład Reorganizuje jeden indeks klastrowany.Ponieważ indeks zawiera typ dane LOBpoziom liść, instrukcja również Kompaktuje wszystkie strony zawierające dane dużego obiektu. Należy zauważyć, że określenie opcji Z (LOB_COMPACTION) nie jest wymagane, ponieważ wartość domyślna jest włączone.

USE AdventureWorks2008R2;
GO
ALTER INDEX PK_ProductPhoto_ProductPhotoID ON Production.ProductPhoto
REORGANIZE ;
GO

D.Ustawianie opcji w indeksie

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

USE AdventureWorks2008R2;
GO
ALTER INDEX AK_SalesOrderHeader_SalesOrderNumber ON
    Sales.SalesOrderHeader
SET (
    STATISTICS_NORECOMPUTE = ON,
    IGNORE_DUP_KEY = ON,
    ALLOW_PAGE_LOCKS = ON
    ) ;
GO

E.Wyłączanie indeksu

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

USE AdventureWorks2008R2;
GO
ALTER INDEX IX_Employee_OrganizationNode ON HumanResources.Employee
DISABLE ;
GO

F.Wyłączanie ograniczenia

Następujący przykład wyłącza ograniczenie klucza podstawowego, wyłączając indeks klucza podstawowego.Ograniczenie klucza OBCEGO w tabela podstawowej jest automatycznie wyłączane i wyświetlany jest komunikat ostrzegawczy.

USE AdventureWorks2008R2;
GO
ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department
DISABLE ;
GO

zestaw wyników zwraca komunikat ostrzegawczy.

Warning: Foreign key 'FK_EmployeeDepartmentHistory_Department_DepartmentID'

on table 'EmployeeDepartmentHistory' referencing table 'Department'

was disabled as a result of disabling the index 'PK_Department_DepartmentID'.

G.Włączenie ograniczenia

Poniższy przykład włącza ograniczeń klucza podstawowego i klucza OBCEGO, które zostały wyłączone w przykładzie F.

Ograniczenie klucza podstawowego jest włączona przez odbudowanie indeksu klucza podstawowego.

USE AdventureWorks2008R2;
GO
ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department
REBUILD ;
GO

Ograniczenie klucza OBCEGO jest włączone.

ALTER TABLE HumanResources.EmployeeDepartmentHistory
CHECK CONSTRAINT FK_EmployeeDepartmentHistory_Department_DepartmentID;
GO

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, że próbki indeks partycjonowany został zainstalowany.

USE AdventureWorks2008R2;
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 w nonpartitioned tabela.

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

Przykłady kompresji dodatkowych danych, zobacz Tworzenie skompresowanego tabel i indeksów.