Sdílet prostřednictvím


STOL index_option (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Určuje sadu možností, které lze použít na index, který je součástí definice omezení, která je vytvořena pomocí ALTER TABLE.

Úplný popis možností indexu najdete v tématu CREATE INDEX.

Transact-SQL konvence syntaxe

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 | VYPNUTO }

platí pro: SQL Server 2008 (10.0.x) a novější verze

Určuje odsazení indexu. Výchozí hodnota je OFF.

  • ON

    Procento volného místa určeného parametrem FILLFACTOR se použije na stránky indexu na střední úrovni.

  • Nezadá se fillfactor

    Stránky střední úrovně jsou vyplněné tak, aby se blíží kapacitě, takže alespoň jeden řádek maximální velikosti indexu mohl mít dostatek místa vzhledem k sadě klíčů na mezilehlých stránkách.

FILLFACTOR = fillfactor

platí pro: SQL Server 2008 (10.0.x) a novější verze

Určuje procento, které určuje, jak by měl databázový stroj během vytváření nebo změny indexu nastavit úroveň listu každé stránky indexu. Zadaná hodnota musí být celočíselná hodnota od 1 do 100. Výchozí hodnota je 0.

Note

Hodnoty výplňového faktoru 0 a 100 jsou ve všech ohledech stejné.

IGNORE_DUP_KEY = { ON | VYPNUTO }

Určuje typ odpovědi, když se operace vložení pokusí vložit duplicitní hodnoty klíče do jedinečného indexu. Možnost IGNORE_DUP_KEY se vztahuje pouze na operace vložení po vytvoření nebo vytvoření indexu. Možnost nemá žádný vliv při provádění CREATE INDEX, ALTER INDEXnebo UPDATE. Výchozí hodnota je OFF.

  • ON

    Při vložení duplicitních hodnot klíče do jedinečného indexu dojde k upozornění. Pouze řádky, které porušují omezení jedinečnosti, selžou.

  • OFF

    Při vložení duplicitních hodnot klíče do jedinečného indexu se zobrazí chybová zpráva. Celá operace INSERT se vrátí zpět.

IGNORE_DUP_KEY Nelze nastavit na ON indexy vytvořené v zobrazení, neunique indexy, indexy XML, prostorové indexy a filtrované indexy.

Chcete-li zobrazit , použijtesys.indexes .

V zpětně kompatibilní syntaxi je WITH IGNORE_DUP_KEY ekvivalentní WITH IGNORE_DUP_KEY = ON.

STATISTICS_NORECOMPUTE = { ON | VYPNUTO }

Zakažte nebo povolte možnost AUTO_STATISTICS_UPDATEautomatické aktualizace statistiky pro statistiky související se zadanými indexy. Výchozí hodnota je OFF.

  • ON

    Automatické aktualizace statistik jsou po znovu sestavení indexu zakázány.

  • OFF

    Automatické aktualizace statistik jsou povoleny po znovu sestavení indexu.

Pokud chcete obnovit automatickou aktualizaci statistik, nastavte STATISTICS_NORECOMPUTE na OFFnebo spusťte UPDATE STATISTICS bez klauzule NORECOMPUTE.

Warning

Pokud zakážete automatickou aktualizaci statistik, může zabránit optimalizaci dotazů v výběru optimálních plánů provádění pro dotazy, které zahrnují tabulku. Tuto možnost byste měli používat střídmě a pouze kvalifikovaným správcem databáze.

Toto nastavení nezabrání automatické aktualizaci s úplným prohledáním statistik souvisejících s indexem během operace opětovného sestavení.

ALLOW_ROW_LOCKS = { ON | VYPNUTO }

platí pro: SQL Server 2008 (10.0.x) a novější verze

Určuje, jestli jsou povolené zámky řádků. Výchozí hodnota je ZAPNUTÁ.

  • ON

    Zámky řádků jsou povoleny při přístupu k indexu. Databázový stroj určuje, kdy se používají zámky řádků.

  • OFF

    Zámky řádků se nepoužívají.

ALLOW_PAGE_LOCKS = { ON | VYPNUTO }

platí pro: SQL Server 2008 (10.0.x) a novější verze

Určuje, jestli jsou povolené zámky stránek. Výchozí hodnota je ZAPNUTÁ.

  • ON

    Zámky stránek jsou povoleny při přístupu k indexu. Databázový stroj určuje, kdy se používají zámky stránek.

  • OFF

    Zámky stránek se nepoužívají.

OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | VYPNUTO }

Platí pro: SQL Server 2019 (15.x) a novější verze

Určuje, jestli se má optimalizovat pro kolizí vložení poslední stránky. Výchozí hodnota je OFF. Další informace najdete v části Sekvenční klíče článku CREATE INDEX .

SORT_IN_TEMPDB = { ON | VYPNUTO }

platí pro: SQL Server 2008 (10.0.x) a novější verze

Určuje, zda se mají ukládat výsledky řazení .tempdb Výchozí hodnota je OFF.

  • ON

    Přechodné výsledky řazení, které se používají k sestavení indexu, jsou uloženy v tempdb. To může zkrátit dobu potřebnou k vytvoření indexu, pokud tempdb je na jiné sadě disků než uživatelská databáze. Tím se ale zvýší množství místa na disku, které se použije při sestavení indexu.

  • OFF

    Výsledky zprostředkujícího řazení jsou uloženy ve stejné databázi jako index.

ONLINE = { ON | VYPNUTO }

platí pro: SQL Server 2008 (10.0.x) a novější verze

Určuje, jestli jsou podkladové tabulky a přidružené indexy dostupné pro dotazy a úpravy dat během operace indexu. Výchozí hodnota je OFF. REBUILD lze provést jako ONLINE operaci.

Note

Jedinečné neclusterované indexy nejde vytvořit online. To zahrnuje indexy vytvořené z důvodu UNIQUE omezení nebo PRIMARY KEY omezení.

  • ON

    Dlouhodobé zámky tabulek se během operace indexu neudržují. Během hlavní fáze operace indexu se ve zdrojové tabulce uchovává pouze zámek sdílení záměru (IS). To umožňuje pokračovat v dotazech nebo aktualizacích podkladové tabulky a indexů. Na začátku operace se na zdrojovém objektu po krátkou dobu uchovává zámek Shared (S). Na konci operace se po krátkou dobu získá zámek S (Shared) ve zdroji, pokud se vytváří neclusterovaný index; nebo se zámek Sch-M (úprava schématu) získá při vytvoření nebo vyřazení clusterovaného indexu online a při vytvoření clusterovaného nebo neclusterovaného indexu. I když jsou zámky online indexů krátké zámky metadat, zejména zámek Sch-M musí čekat na dokončení všech blokujících transakcí v této tabulce. Během doby čekání Sch-M zámek blokuje všechny ostatní transakce, které čekají za tímto zámkem při přístupu ke stejné tabulce. ONLINE nelze nastavit na ON při vytváření indexu v místní dočasné tabulce.

    Note

    Opětovné sestavení online indexu může nastavit low_priority_lock_wait možnosti popsané dále v této části. low_priority_lock_wait spravuje prioritu zámku S a Sch-M během opětovného sestavení indexu online.

  • OFF

    Zámky tabulek se použijí během operace indexu. Tím se během operace zabrání všem uživatelům přístup k podkladové tabulce. Operace offline indexu, která vytvoří, znovu sestaví nebo zahodí clusterovaný index nebo znovu sestaví nebo zamkne neclusterovaný index, získá v tabulce zámek schématu (Sch-M). Tím se během operace zabrání všem uživatelům přístup k podkladové tabulce. Operace offline indexu, která vytvoří neclusterovaný index, získá v tabulce zámek Shared (S). To brání aktualizacím podkladové tabulky, ale umožňuje operace čtení, jako SELECT jsou příkazy.

Další informace najdete v tématu Fungování operací indexu online.

Note

Online indexovací operace nejsou k dispozici v každé edici Microsoft SQL Serveru. Seznam funkcí podporovaných edicemi SQL Serveru najdete v tématu Edice a podporované funkce systému SQL Server 2022.

RESUMABLE = { ON | VYPNUTO}

platí pro: SQL Server 2022 (16.x) a novější verze

Určuje, zda je operace ALTER TABLE ADD CONSTRAINT obnovitelná. Operace přidání omezení tabulky se dá obnovit, když ON. Operace přidání omezení tabulky není při OFFobnovitelná. Výchozí hodnota je OFF. RESUMABLE Pokud je tato možnost nastavená na ON, je tato možnost ONLINE = ON povinná.

MAX_DURATION při použití s RESUMABLE = ON (vyžaduje ONLINE = ON) označuje čas (celočíselná hodnota zadaná v minutách), že se před pozastavením provede operace obnovení online přidání omezení. Pokud není zadáno, operace pokračuje až do dokončení. MAXDOP podporuje RESUMABLE = ON se také.

Další informace o povolení a používání resumable ALTER TABLE ADD CONSTRAINT operací naleznete v tématu Obnovitelné přidání omezení tabulky.

MAXDOP = max_degree_of_parallelism

platí pro: SQL Server 2008 (10.0.x) a novější verze

Přepíše maximální stupeň konfigurace paralelismu během operace indexu. Další informace najdete v tématu Konfigurace maximálního stupně paralelismu (možnost konfigurace serveru). Slouží MAXDOP k omezení počtu procesorů používaných při paralelním provádění plánu. Maximum je 64 procesorů.

max_degree_of_parallelism může být:

  • 1: Potlačí generování paralelního plánu.
  • >1: Omezuje maximální počet procesorů použitých v paralelní operaci indexu na zadané číslo.
  • 0 (výchozí): Používá skutečný počet procesorů nebo méně procesorů na základě aktuální systémové úlohy.

Další informace naleznete v tématu Konfigurace paralelních indexových operací.

Note

Paralelní indexové operace nejsou k dispozici v každé edici Microsoft SQL Serveru. Seznam funkcí podporovaných edicemi SQL Serveru najdete v tématu Edice a podporované funkce systému SQL Server 2022.

DATA_COMPRESSION

platí pro: SQL Server 2008 (10.0.x) a novější verze

Určuje možnost komprese dat pro zadanou tabulku, číslo oddílu nebo rozsah oddílů. Možnosti jsou následující:

  • NONE

    Tabulky nebo zadané oddíly nejsou komprimované. Platí pouze pro tabulky rowstore; se nevztahuje na tabulky columnstore.

  • ROW

    Tabulky nebo zadané oddíly se komprimují pomocí komprese řádků. Platí pouze pro tabulky rowstore; se nevztahuje na tabulky columnstore.

  • PAGE

    Tabulky nebo zadané oddíly se komprimují pomocí komprese stránky. Platí pouze pro tabulky rowstore; se nevztahuje na tabulky columnstore.

  • COLUMNSTORE

    Platí pro: SQL Server 2014 (12.x) a novější verze

    Platí pouze pro tabulky columnstore. COLUMNSTORE určuje dekomprimaci oddílu, který byl komprimován s COLUMNSTORE_ARCHIVE možností. Po obnovení COLUMNSTORE dat bude index nadále komprimován pomocí komprese columnstore, která se používá pro všechny tabulky columnstore.

  • COLUMNSTORE_ARCHIVE

    Platí pro: SQL Server 2014 (12.x) a novější verze

    Platí pouze pro tabulky columnstore, které jsou tabulky uložené s clusterovaným indexem columnstore. COLUMNSTORE_ARCHIVE dále komprimuje zadaný oddíl na menší velikost. Můžete ho použít pro archivaci nebo v jiných situacích, které vyžadují méně úložiště a můžou si dovolit více času pro ukládání a načítání.

Další informace o kompresi naleznete v tématu Komprese dat.

XML_COMPRESSION

platí pro: SQL Server 2022 (16.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance.

Určuje možnost komprese XML pro všechny xml sloupce datového typu v tabulce. Možnosti jsou následující:

  • ON

    Sloupce používající datový typ xml jsou komprimované.

  • OFF

    Sloupce používající xml datový typ nejsou komprimované.

ON PARTITIONS ( { <partition_number_expression> | <rozsah> } [ ,...n ] )

platí pro: SQL Server 2008 (10.0.x) a novější verze

Určuje oddíly, na které se vztahují nastavení DATA_COMPRESSION nebo XML_COMPRESSION. Pokud tabulka není rozdělená na oddíly, ON PARTITIONS argument vygeneruje chybu. ON PARTITIONS Pokud klauzule není zadaná, použije se DATA_COMPRESSION možnost nebo XML_COMPRESSION možnost pro všechny oddíly dělené tabulky.

<partition_number_expression> lze zadat následujícími způsoby:

  • Zadejte číslo oddílu, například: ON PARTITIONS (2).
  • Zadejte čísla oddílů pro několik jednotlivých oddílů oddělených čárkami, například: ON PARTITIONS (1, 5).
  • Zadejte rozsahy i jednotlivé oddíly, například: ON PARTITIONS (2, 4, 6 TO 8).

<range> lze zadat jako čísla oddílů oddělená slovem TO, například: ON PARTITIONS (6 TO 8).

Pokud chcete nastavit různé typy komprese dat pro různé oddíly, zadejte DATA_COMPRESSION možnost více než jednou, například:

--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>

Ve většině případů opětovné sestavení indexu znovu sestaví všechny oddíly děleného indexu. Následující možnosti, pokud se použijí na jeden oddíl, nevybudují všechny oddíly znovu.

  • SORT_IN_TEMPDB
  • MAXDOP
  • DATA_COMPRESSION
  • XML_COMPRESSION

low_priority_lock_wait

Platí pro: SQL Server 2014 (12.x) a novější verze

SWITCH Opětovné sestavení indexu nebo online indexu se dokončí, jakmile pro tuto tabulku nejsou žádné blokující operace. WAIT_AT_LOW_PRIORITY indikuje, že pokud se operace opětovného SWITCH sestavení online indexu nedá dokončit okamžitě, čeká. Operace uchovává zámky s nízkou prioritou, což umožňuje další operace, které blokují zámky v konfliktu s příkazem DDL, pokračovat. Vynechání možnosti WAIT AT LOW PRIORITY odpovídá WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE).

MAX_DURATION = čas [ MINUTY ]

Doba čekání (celočíselná hodnota zadaná v minutách), kterou SWITCH musí získat zámek opětovného sestavení indexu nebo online indexu, který se musí získat, čeká při spuštění příkazu DDL. Operace opětovného SWITCH sestavení nebo online indexu se pokusí provést okamžitě. Pokud je operace zablokovaná po MAX_DURATION tuto dobu, provede se jedna z ABORT_AFTER_WAIT akcí. MAX_DURATION čas je vždy v minutách a slovo MINUTES je možné vynechat.

ABORT_AFTER_WAIT = { NONE | SELF | BLOKÁTORY }

  • NONE

    Pokračuje v operaci opětovného sestavení indexu SWITCH nebo online beze změny priority zámku (pomocí běžné priority).

  • SELF

    Ukončí aktuálně spuštěnou operaci DDL opětovného sestavení indexu SWITCH nebo online indexu bez provedení jakékoli akce.

  • BLOCKERS

    Ukonče všechny uživatelské transakce, které blokují aktuálně operaci DDL opětovného sestavení indexu SWITCH nebo online indexu, aby operace mohl pokračovat.

    BLOCKERS ALTER ANY CONNECTION vyžaduje oprávnění.