Udostępnij za pomocą


STOŁ OLTAROWY index_option (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

Określa zestaw opcji, które można zastosować do indeksu, który jest częścią definicji ograniczenia, która jest tworzona przy użyciu alter TABLE.

Pełny opis opcji indeksu można znaleźć w temacie CREATE INDEX (TWORZENIE INDEKSu).

Transact-SQL konwencje składni

Syntax

{
    PAD_INDEX = { ON | OFF }
  | FILLFACTOR = fillfactor
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { ON | OFF }
  | ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS = { ON | OFF }
  | OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | OFF }
  | SORT_IN_TEMPDB = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }
      [ ON PARTITIONS ( { <partition_number_expression> | <range> }
      [ , ...n ] ) ]
  | XML_COMPRESSION = { ON | OFF }
      [ ON PARTITIONS ( { <partition_number_expression> | <range> }
      [ , ...n ] ) ]
  | ONLINE = { ON | OFF }
  | RESUMABLE = { ON | OFF }
  | MAX_DURATION = <time> [ MINUTES ]
}

<range> ::=
<partition_number_expression> TO <partition_number_expression>

<single_partition_rebuild__option> ::=
{
    SORT_IN_TEMPDB = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE } }
  | ONLINE = { ON [ ( <low_priority_lock_wait> ) ] | OFF }
}

<low_priority_lock_wait>::=
{
    WAIT_AT_LOW_PRIORITY ( MAX_DURATION = <time> [ MINUTES ] ,
                           ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS } )
}

Arguments

PAD_INDEX = { ON | WYŁ. }

Dotyczy: SQL Server 2008 (10.0.x) i nowsze wersje

Określa dopełnienie indeksu. Wartość domyślna to OFF.

  • ON

    Procent wolnego miejsca określonego przez FILLFACTOR program jest stosowany do stron na poziomie pośrednim indeksu.

  • Nie określono off lub fillfactor

    Strony na poziomie pośrednim są wypełniane w pobliżu pojemności, pozostawiając wystarczającą ilość miejsca dla co najmniej jednego wiersza maksymalnego rozmiaru indeksu, biorąc pod uwagę zestaw kluczy na stronach pośrednich.

FILLFACTOR = wypełnienie

Dotyczy: SQL Server 2008 (10.0.x) i nowsze wersje

Określa wartość procentową wskazującą, jak pełny aparat bazy danych powinien ustawić poziom liścia każdej strony indeksu podczas tworzenia lub modyfikowania indeksu. Określona wartość musi być liczbą całkowitą z zakresu od 1 do 100. Wartość domyślna to 0.

Note

Wartości współczynnika wypełnienia 0 i 100 są identyczne we wszystkich aspektach.

IGNORE_DUP_KEY = { ON | WYŁ. }

Określa typ odpowiedzi, gdy operacja wstawiania próbuje wstawić zduplikowane wartości klucza do unikatowego indeksu. Opcja IGNORE_DUP_KEY dotyczy tylko operacji wstawiania po utworzeniu lub ponownym utworzeniu indeksu. Opcja nie ma wpływu podczas wykonywania CREATE INDEX, ALTER INDEXlub UPDATE. Wartość domyślna to OFF.

  • ON

    Komunikat ostrzegawczy występuje, gdy zduplikowane wartości klucza są wstawione do unikatowego indeksu. Tylko wiersze naruszające ograniczenie unikatowości kończą się niepowodzeniem.

  • OFF

    Komunikat o błędzie występuje, gdy zduplikowane wartości klucza są wstawione do unikatowego indeksu. Cała operacja INSERT jest cofana.

IGNORE_DUP_KEY Nie można ustawić wartości na ON wartość dla indeksów utworzonych w widoku, indeksach niepowiązanych, indeksach XML, indeksach przestrzennych i filtrowanych indeksach.

Aby wyświetlić IGNORE_DUP_KEY, użyj sys.indexes.

W składni zgodnej z poprzednimi wersjami WITH IGNORE_DUP_KEY jest równoważna WITH IGNORE_DUP_KEY = ON.

STATISTICS_NORECOMPUTE = { ON | WYŁ. }

Wyłącz lub włącz opcję automatycznej aktualizacji statystyk, AUTO_STATISTICS_UPDATE, dla statystyk związanych z określonymi indeksami. Wartość domyślna to OFF.

  • ON

    Automatyczne aktualizacje statystyk są wyłączone po ponownym skompilowania indeksu.

  • OFF

    Automatyczne aktualizacje statystyk są włączone po ponownym skompilowania indeksu.

Aby przywrócić automatyczne aktualizowanie statystyk, ustaw STATISTICS_NORECOMPUTE na OFFlub wykonaj UPDATE STATISTICS bez klauzuli NORECOMPUTE.

Warning

Jeśli wyłączysz automatyczne aktualizowanie statystyk, może to uniemożliwić optymalizatorowi zapytań wybranie optymalnych planów wykonywania zapytań obejmujących tabelę. Tej opcji należy używać oszczędnie i tylko przez kwalifikowanego administratora bazy danych.

To ustawienie nie uniemożliwia automatycznej aktualizacji za pomocą pełnego skanowania statystyk związanych z indeksem podczas operacji odbudowy.

ALLOW_ROW_LOCKS = { ON | WYŁ. }

Dotyczy: SQL Server 2008 (10.0.x) i nowsze wersje

Określa, czy blokady wierszy są dozwolone. Wartość domyślna to WŁĄCZONE.

  • ON

    Blokady wierszy są dozwolone podczas uzyskiwania dostępu do indeksu. Aparat bazy danych określa, kiedy są używane blokady wierszy.

  • OFF

    Blokady wierszy nie są używane.

ALLOW_PAGE_LOCKS = { ON | WYŁ. }

Dotyczy: SQL Server 2008 (10.0.x) i nowsze wersje

Określa, czy blokady strony są dozwolone. Wartość domyślna to WŁĄCZONE.

  • ON

    Blokady stron są dozwolone podczas uzyskiwania dostępu do indeksu. Aparat bazy danych określa, kiedy są używane blokady strony.

  • OFF

    Blokady stron nie są używane.

OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | WYŁ. }

Dotyczy: SQL Server 2019 (15.x) i nowsze wersje

Określa, czy należy zoptymalizować pod kątem rywalizacji o wstawienie ostatniej strony. Wartość domyślna to OFF. Aby uzyskać więcej informacji, zobacz sekcję Sekwencyjne klucze artykułu CREATE INDEX .

SORT_IN_TEMPDB = { ON | WYŁ. }

Dotyczy: SQL Server 2008 (10.0.x) i nowsze wersje

Określa, czy mają być przechowywane wyniki sortowania w pliku tempdb. Wartość domyślna to OFF.

  • ON

    Wyniki sortowania pośredniego używane do kompilowania indeksu są przechowywane w tempdb. Może to skrócić czas wymagany do utworzenia indeksu, jeśli tempdb znajduje się w innym zestawie dysków niż baza danych użytkownika. Zwiększa to jednak ilość miejsca na dysku używanego podczas kompilacji indeksu.

  • OFF

    Wyniki sortowania pośredniego są przechowywane w tej samej bazie danych co indeks.

ONLINE = { ON | WYŁ. }

Dotyczy: SQL Server 2008 (10.0.x) i nowsze wersje

Określa, czy tabele bazowe i skojarzone indeksy są dostępne dla zapytań i modyfikacji danych podczas operacji indeksu. Wartość domyślna to OFF. REBUILD można wykonać jako operację ONLINE .

Note

Nie można utworzyć unikatowych indeksów nieklastrowanych w trybie online. Obejmuje to indeksy, które są tworzone z powodu UNIQUE ograniczenia lub PRIMARY KEY .

  • ON

    Długoterminowe blokady tabeli nie są przechowywane podczas operacji indeksowania. W fazie głównej operacji indeksowania blokada udziału intencji (IS) jest przechowywana w tabeli źródłowej. Umożliwia to kontynuowanie zapytań lub aktualizacji podstawowej tabeli i indeksów. Na początku operacji blokada Współdzielona (S) jest przechowywana w obiekcie źródłowym przez krótki czas. Na końcu operacji przez krótki czas jest uzyskiwana blokada S (współużytkowana) w źródle, jeśli tworzony jest indeks nieklastrowany; lub blokada Sch-M (modyfikacja schematu) jest uzyskiwana, gdy indeks klastrowany jest tworzony lub porzucany w trybie online i gdy indeks klastrowany lub nieklastrowany jest odbudowywany. Mimo że blokady indeksu online są krótkimi blokadami metadanych, zwłaszcza blokada Sch-M musi czekać na ukończenie wszystkich transakcji blokujących w tej tabeli. W czasie oczekiwania Sch-M blokada blokuje wszystkie inne transakcje, które oczekują za tą blokadą podczas uzyskiwania dostępu do tej samej tabeli. ONLINE nie można ustawić na ON podczas tworzenia indeksu w lokalnej tabeli tymczasowej.

    Note

    Ponowne kompilowanie indeksu online może ustawić opcje low_priority_lock_wait opisane w dalszej części tej sekcji. low_priority_lock_wait zarządza priorytetem blokady S i Sch-M podczas ponownego kompilowania indeksu online.

  • OFF

    Blokady tabeli są stosowane podczas operacji indeksowania. Zapobiega to dostępowi wszystkich użytkowników do tabeli bazowej podczas operacji. Operacja indeksu w trybie offline, która tworzy, kompiluje lub usuwa indeks klastrowany albo usuwa indeks nieklastrowany, uzyskuje modyfikację schematu (Sch-M) blokady w tabeli. Zapobiega to dostępowi wszystkich użytkowników do tabeli bazowej podczas operacji. Operacja indeksu offline, która tworzy indeks nieklastrowany, uzyskuje blokadę współużytkowaną (S) w tabeli. Zapobiega to aktualizacjom tabeli bazowej, ale umożliwia wykonywanie operacji odczytu, takich jak SELECT instrukcje.

Aby uzyskać więcej informacji, zobacz How Online Index Operations Work.

Note

Operacje indeksowania online nie są dostępne w każdej wersji programu Microsoft SQL Server. Aby uzyskać listę funkcji obsługiwanych przez wersje programu SQL Server, zobacz Editions i obsługiwane funkcje programu SQL Server 2022.

WZNAWIANIE = { WŁ. | WYŁ.}

Dotyczy: SQL Server 2022 (16.x) i nowsze wersje

Określa, czy operacja ALTER TABLE ADD CONSTRAINT jest wznawiana. Operacja dodawania ograniczeń tabeli jest wznawiana, gdy ON. Operacja dodawania ograniczeń tabeli nie jest wznawiana, gdy OFF. Wartość domyślna to OFF. Gdy opcja jest ustawiona RESUMABLE na ONwartość , wymagana jest opcja ONLINE = ON .

MAX_DURATION w przypadku użycia z RESUMABLE = ON (wymaga ONLINE = ON) wskazuje czas (wartość całkowita określona w minutach), że wznawiana operacja dodawania ograniczeń online jest wykonywana przed wstrzymaniem. Jeśli nie zostanie określony, operacja będzie kontynuowana do momentu ukończenia. MAXDOP jest również obsługiwany w RESUMABLE = ON programie .

Aby uzyskać więcej informacji na temat włączania i używania operacji wznawianych ALTER TABLE ADD CONSTRAINT , zobacz Wznawianie ograniczeń tabeli.

MAXDOP = max_degree_of_parallelism

Dotyczy: SQL Server 2008 (10.0.x) i nowsze wersje

Zastępuje opcję konfiguracji maksymalnego stopnia równoległości podczas operacji indeksowania. Aby uzyskać więcej informacji, zobacz Konfigurowanie maksymalnego stopnia równoległości (opcja konfiguracji serwera). Użyj MAXDOP polecenia , aby ograniczyć liczbę procesorów używanych w równoległym wykonywaniu planu. Maksymalna wartość to 64 procesory.

max_degree_of_parallelism może to być:

  • 1: pomija generowanie planu równoległego.
  • >1: ogranicza maksymalną liczbę procesorów używanych w operacji indeksowania równoległego do określonej liczby.
  • 0 (ustawienie domyślne): używa rzeczywistej liczby procesorów lub mniej na podstawie bieżącego obciążenia systemu.

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

Note

Operacje indeksowania równoległego nie są dostępne w każdej wersji programu Microsoft SQL Server. Aby uzyskać listę funkcji obsługiwanych przez wersje programu SQL Server, zobacz Editions i obsługiwane funkcje programu SQL Server 2022.

DATA_COMPRESSION

Dotyczy: SQL Server 2008 (10.0.x) i nowsze wersje

Określa opcję kompresji danych dla określonej tabeli, numeru partycji lub zakresu partycji. Opcje są następujące:

  • NONE

    Tabele lub określone partycje nie są kompresowane. Dotyczy tylko tabel magazynu wierszy; nie ma zastosowania do tabel magazynu kolumn.

  • ROW

    Tabele lub określone partycje są kompresowane przy użyciu kompresji wierszy. Dotyczy tylko tabel magazynu wierszy; nie ma zastosowania do tabel magazynu kolumn.

  • PAGE

    Tabele lub określone partycje są kompresowane przy użyciu kompresji strony. Dotyczy tylko tabel magazynu wierszy; nie ma zastosowania do tabel magazynu kolumn.

  • COLUMNSTORE

    Dotyczy: SQL Server 2014 (12.x) i nowsze wersje

    Dotyczy tylko tabel magazynu kolumn. COLUMNSTORE określa dekompresowanie partycji, która została skompresowana za pomocą COLUMNSTORE_ARCHIVE opcji . Po przywróceniu COLUMNSTORE danych indeks będzie nadal kompresowany przy użyciu kompresji magazynu kolumn, która jest używana dla wszystkich tabel magazynu kolumn.

  • COLUMNSTORE_ARCHIVE

    Dotyczy: SQL Server 2014 (12.x) i nowsze wersje

    Dotyczy tylko tabel magazynu kolumn, które są tabelami przechowywanymi w klastrowanym indeksie magazynu kolumn. COLUMNSTORE_ARCHIVE dodatkowo kompresuje określoną partycję do mniejszego rozmiaru. Może to być używane do archiwizacji lub w innych sytuacjach, które wymagają mniejszej ilości miejsca do magazynowania i mogą pozwolić sobie na więcej czasu na przechowywanie i pobieranie

Aby uzyskać więcej informacji na temat kompresji, zobacz Kompresja danych.

XML_COMPRESSION

Dotyczy: SQL Server 2022 (16.x) i nowsze wersje, Azure SQL Database i Azure SQL Managed Instance.

Określa opcję kompresji XML dla wszystkich kolumn typu danych xml xml w tabeli. Opcje są następujące:

  • ON

    Kolumny używające xml typu danych są kompresowane.

  • OFF

    Kolumny używające typu danych xml nie są kompresowane.

NA PARTYCJACH ( { <partition_number_expression> | <zakres> } [ ,... n ] )

Dotyczy: SQL Server 2008 (10.0.x) i nowsze wersje

Określa partycje, do których mają zastosowanie ustawienia DATA_COMPRESSION lub XML_COMPRESSION. Jeśli tabela nie jest partycjonowana, argument ON PARTITIONS generuje błąd. Jeśli klauzula ON PARTITIONS nie jest podana, DATA_COMPRESSION opcja lub XML_COMPRESSION ma zastosowanie do wszystkich partycji tabeli partycjonowanej.

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

  • Podaj liczbę partycji, na przykład: ON PARTITIONS (2).
  • Podaj numery partycji dla kilku pojedynczych partycji rozdzielonych przecinkami, na przykład: ON PARTITIONS (1, 5).
  • Podaj zarówno zakresy, jak i poszczególne partycje, na przykład: ON PARTITIONS (2, 4, 6 TO 8).

<range> można określić jako numery partycji rozdzielone wyrazem TO, na przykład: ON PARTITIONS (6 TO 8).

Aby ustawić różne typy kompresji danych dla różnych partycji, określ opcję DATA_COMPRESSION więcej niż raz, na przykład:

--For rowstore tables
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)
)

--For columnstore tables
REBUILD WITH
(
  DATA_COMPRESSION = COLUMNSTORE ON PARTITIONS (1, 3, 5),
  DATA_COMPRESSION = COLUMNSTORE_ARCHIVE ON PARTITIONS (2, 4, 6 TO 8)
)

<single_partition_rebuild__option>

W większości przypadków ponowne kompilowanie indeksu również ponownie kompiluje wszystkie partycje indeksu partycjonowanego. Następujące opcje, po zastosowaniu do pojedynczej partycji, nie kompilują wszystkich partycji.

  • SORT_IN_TEMPDB
  • MAXDOP
  • DATA_COMPRESSION
  • XML_COMPRESSION

low_priority_lock_wait

Dotyczy: SQL Server 2014 (12.x) i nowsze wersje

Ponowne SWITCH kompilowanie indeksu lub online kończy się zaraz po zakończeniu operacji blokowania dla tej tabeli. WAIT_AT_LOW_PRIORITY wskazuje, że jeśli nie można natychmiast ukończyć operacji ponownego SWITCH kompilowania indeksu lub online, czeka. Operacja przechowuje blokady o niskim priorytcie, co umożliwia kontynuowanie innych operacji, które przechowują blokady powodujące konflikt z instrukcją DDL. Pominięcie opcji WAIT AT LOW PRIORITY jest równoważne WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE).

MAX_DURATION = czas [ MINUTY ]

Czas oczekiwania (wartość całkowita określona w minutach), który musi zostać nabyty przez funkcję ponownej SWITCH kompilacji indeksu lub online, czeka podczas wykonywania polecenia DDL. Operacja ponownego SWITCH kompilowania indeksu lub online próbuje wykonać natychmiast. Jeśli operacja zostanie zablokowana przez MAX_DURATION ten czas, zostanie wykonana jedna z ABORT_AFTER_WAIT akcji. MAX_DURATION czas jest zawsze w minutach, a słowo MINUTES można pominąć.

ABORT_AFTER_WAIT = { NONE | SELF | BLOKOWANIA }

  • NONE

    Kontynuuje operację ponownego kompilowania indeksu SWITCH lub online bez zmiany priorytetu blokady (przy użyciu zwykłego priorytetu).

  • SELF

    Kończy obecnie wykonywaną operację DDL ponownego kompilowania indeksu SWITCH lub online bez podejmowania żadnych akcji.

  • BLOCKERS

    Zabija wszystkie transakcje użytkownika, które blokują obecnie operację DDL indeksu SWITCH lub online, aby operacja mogła kontynuować.

    BLOCKERS ALTER ANY CONNECTION wymaga uprawnienia.