Olvasás angol nyelven

Megosztás a következőn keresztül:


ALTER INDEX (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database a Microsoft Fabric

Módosít egy meglévő táblát vagy nézetindexet (sortár, oszloptár vagy XML) az index letiltásával, újraépítésével vagy átrendezésével; vagy az index beállításainak beállításával.

Transact-SQL szintaxis konvenciói

Szintaxis

Szintaxis az SQL Serverhez, az Azure SQL Database-hez és a felügyelt Azure SQL-példányhoz.

syntaxsql
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 ( <reorganize_option>  ) ]
    | SET ( <set_index_option> [ , ...n ] )
    | RESUME [ WITH (<resumable_index_option> [ , ...n ] ) ]
    | PAUSE
    | ABORT
}
[ ; ]

<object> ::=
{
    { database_name.schema_name.table_or_view_name | schema_name.table_or_view_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 }
    | STATISTICS_INCREMENTAL = { ON | OFF }
    | ONLINE = { ON [ ( <low_priority_lock_wait> ) ] | OFF }
    | RESUMABLE = { ON | OFF }
    | MAX_DURATION = <time> [ MINUTES ]
    | ALLOW_ROW_LOCKS = { ON | OFF }
    | ALLOW_PAGE_LOCKS = { ON | OFF }
    | MAXDOP = max_degree_of_parallelism
    | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }
        [ ON PARTITIONS ( { <partition_number> [ TO <partition_number> ] } [ , ...n ] ) ]
    | XML_COMPRESSION = { ON | OFF }
        [ ON PARTITIONS ( { <partition_number> [ TO <partition_number> ] } [ , ...n ] ) ] }

<single_partition_rebuild_index_option> ::=
{
      SORT_IN_TEMPDB = { ON | OFF }
    | MAXDOP = max_degree_of_parallelism
    | RESUMABLE = { ON | OFF }
    | MAX_DURATION = <time> [ MINUTES ]
    | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }
    | XML_COMPRESSION = { ON | OFF }
    | ONLINE = { ON [ ( <low_priority_lock_wait> ) ] | OFF }
}

<reorganize_option> ::=
{
       LOB_COMPACTION = { ON | OFF }
    |  COMPRESS_ALL_ROW_GROUPS =  { ON | OFF }
}

<set_index_option> ::=
{
      ALLOW_ROW_LOCKS = { ON | OFF }
    | ALLOW_PAGE_LOCKS = { ON | OFF }
    | OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | OFF }
    | IGNORE_DUP_KEY = { ON | OFF }
    | STATISTICS_NORECOMPUTE = { ON | OFF }
    | COMPRESSION_DELAY = { 0 | delay [ Minutes ] }
}

<resumable_index_option> ::=
 {
    MAXDOP = max_degree_of_parallelism
    | MAX_DURATION = <time> [ MINUTES ]
    | <low_priority_lock_wait>
 }

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

Az Azure Synapse Analytics and Analytics Platform System (PDW) szintaxisa.

syntaxsql
ALTER INDEX { index_name | ALL }
    ON [ schema_name. ] table_name
{
      REBUILD {
            [ PARTITION = ALL [ WITH ( <rebuild_index_option> ) ] ]
          | [ PARTITION = partition_number [ WITH ( <single_partition_rebuild_index_option> ) ] ]
      }
    | DISABLE
    | REORGANIZE [ PARTITION = partition_number ]
}
[ ; ]

<rebuild_index_option> ::=
{
    DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
        [ ON PARTITIONS ( { <partition_number> [ TO <partition_number> ] } [ , ...n ] ) ]
    | XML_COMPRESSION = { ON | OFF }
        [ ON PARTITIONS ( { <partition_number> [ TO <partition_number> ] } [ , ...n ] ) ]
}

<single_partition_rebuild_index_option> ::=
{
    DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
    | XML_COMPRESSION = { ON | OFF }
}

Érvek

index_name

Az index neve. Az indexneveknek egyedinek kell lenniük egy táblában vagy nézetben, de nem kell egyedinek lenniük az adatbázisban. Az indexneveknek az azonosítókszabályait kell követnie.

ÖSSZES

Az index típusától függetlenül megadja a táblához vagy nézethez társított összes indexet. A ALL megadása meghiúsul, ha egy vagy több index offline vagy írásvédett fájlcsoportban található, vagy a megadott művelet nem engedélyezett egy vagy több indextípuson. Az alábbi táblázat az indexműveleteket és a nem engedélyezett indextípusokat sorolja fel.

A ALL kulcsszó használata ezzel a művelettel Sikertelen, ha a tábla egy vagy több
REBUILD WITH ONLINE = ON XML-index

Térbeli index

Oszlopcentrikus index csak az SQL Server 2017-ben (14.x) és a régebbi verziókban. A későbbi verziók támogatják az oszlopcentrikus indexek online újraépítését.
REBUILD PARTITION = <partition_number> Nem particionált index, XML-index, térbeli index vagy letiltott index
REORGANIZE Indexek ALLOW_PAGE_LOCKSOFF
REORGANIZE PARTITION = <partition_number> Nem particionált index, XML-index, térbeli index vagy letiltott index
IGNORE_DUP_KEY = ON XML-index

Térbeli index

Oszlopcentrikus index 1
ONLINE = ON XML-index

Térbeli index
Oszlopcentrikus index 1
RESUMABLE = ON A ALL kulcsszóval nem támogatott újraadható indexek

Ha ALLPARTITION = <partition_number>van megadva, minden indexet össze kell igazítani. Ez azt jelenti, hogy egyenértékű partíciófüggvények alapján vannak particionáltak. A ALLPARTITION használatával az azonos <partition_number> rendelkező indexpartíciók újraépítését vagy újraszervezését eredményezi. További információ a particionált indexekről: Particionált táblák és indexek.

Az online indexműveletekkel kapcsolatos további információkért lásd az online indexelési műveletekre vonatkozó irányelveket.

database_name

Az adatbázis neve.

schema_name

Annak a sémának a neve, amelyhez a tábla vagy nézet tartozik.

table_or_view_name

Az indexhez társított tábla vagy nézet neve. Egy tábla vagy nézet indexadatainak megtekintéséhez használja a sys.indexes katalógusnézetet.

Az Azure SQL Database támogatja a háromrészes névformátumot <database_name>.<schema_name>.<object_name>, ha <database_name> az aktuális adatbázisnév, vagy <database_name>tempdb, és <object_name># vagy ##kezdődik. Ha a séma neve dbo, <schema_name> kihagyható.

ÚJRAÉPÍTÉS [ WITH ( <rebuild_index_option> [ ,... n ] ) ]

A következővonatkozik: SQL Server 2012 (11.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány

Megadja, hogy az index újraépül ugyanazokkal az oszlopokkal, indextípussal, egyediség attribútummal és rendezési sorrenddel. REBUILD engedélyezi a letiltott indexet. A fürtözött indexek újraépítése nem építi újra a társított nemclustered indexeket, hacsak nincs megadva a ALL kulcsszó. Ha nincsenek megadva indexbeállítások, a rendszer a sys.indexes meglévő indexbeállítási értékeit alkalmazza. Minden olyan indexbeállítás esetében, amelynek értéke nem jelenik meg a sys.indexes, a beállítás argumentumdefiníciójában megadott alapértelmezett érték érvényes.

Ha ALL van megadva, és a mögöttes tábla halom, az újraépítési műveletnek nincs hatása a halomra. A táblához társított nemclustered indexek újraépülnek.

A REBUILD művelet minimálisan naplózható, ha az adatbázis-helyreállítási modell tömegesen naplózható vagy egyszerű.

Elsődleges XML-index újraépítésekor a mögöttes felhasználói tábla nem érhető el az indexművelet idejére.

Oszlopcentrikus indexek esetén az újraépítési művelet:

  • Az összes adatot újrakompresszítja az oszloptárba. Az oszlopcentrikus index két példánya létezik, amíg az újraépítési művelet folyamatban van. Ha az újraépítés befejeződött, az adatbázismotor törli az eredeti oszlopcentrikus indexet.
  • Nem őrzi meg a rendezési sorrendet, ha van ilyen. Az oszlopcentrikus index újraépítéséhez és a rendezési sorrend megőrzéséhez vagy bevezetéséhez használja a CREATE [CLUSTERED] COLUMNSTORE INDEX ... ORDER (...) ... WITH (DROP_EXISTING = ON) utasítást.

További információ: Indexkarbantartás optimalizálása a lekérdezési teljesítmény javítása és az erőforrás-felhasználás csökkentése.

FELOSZT

Azt adja meg, hogy egy indexnek csak egy partíciója legyen újraépítve vagy átrendezve. PARTITION nem adható meg, ha index_name nem particionált index.

PARTITION = ALL az összes partíciót újraépíti.

Figyelmeztetés

Az 1000-nél több partícióval rendelkező táblán nem számított indexek létrehozása és újraépítése lehetséges, de nem támogatott. Ez a művelet csökkentett teljesítményt vagy túlzott memóriahasználatot okozhat ezen műveletek során. A Microsoft csak igazított indexek használatát javasolja, ha a partíciók száma meghaladja az 1000-et.

  • partition_number

    Az újraépítendő vagy újraszervezett particionált index partíciószáma. partition_number egy állandó kifejezés, amely hivatkozhat változókra. Ezek közé tartoznak a felhasználó által definiált típusváltozók vagy függvények, valamint a felhasználó által definiált függvények, de nem hivatkozhatnak Transact-SQL utasításra. partition_number léteznie kell, vagy az utasítás meghiúsul.

  • WITH ( <single_partition_rebuild_index_option> )

    SORT_IN_TEMPDB, MAXDOP, DATA_COMPRESSIONés XML_COMPRESSION azok a beállítások, amelyeket meg lehet adni egyetlen partíció (PARTITION = partition_number) szintaxissal történő újraépítésekor. Az XML-indexek nem adhatók meg egyetlen partíció-újraépítési műveletben.

LETILT

Az indexet letiltottként jelöli meg, és nem használható az adatbázismotor számára. Bármely index le van tiltva. A letiltott index indexdefiníciója a rendszerkatalógusban marad, mögöttes indexadatok nélkül. A fürtözött indexek letiltása megakadályozza, hogy a felhasználók hozzáférjenek a mögöttes táblaadatokhoz. Index engedélyezéséhez használja ALTER INDEX REBUILD vagy CREATE INDEX WITH DROP_EXISTING. További információ: Indexek és korlátozások letiltása és Indexek és korlátozások engedélyezése.

Sorcentrikus index ÁTRENDEZÉSE

Sorcentrikus indexek esetén REORGANIZE határozza meg az index levélszintjének átrendezéséhez. A REORGANIZE művelet a következő:

  • Mindig online műveletet hajtott végre. Ez azt jelenti, hogy a táblák hosszú távú zárolása nem tartható meg, és a mögöttes táblában lévő adatok lekérdezései vagy frissítései folytatódhatnak a ALTER INDEX REORGANIZE tranzakció során.
  • Letiltott index esetén nem engedélyezett.
  • Nem engedélyezett, ha ALLOW_PAGE_LOCKSOFFvan beállítva.
  • Nem kerül vissza, ha egy tranzakción belül hajtják végre, és a tranzakció vissza lesz állítva.

Megjegyzés

Ha ALTER INDEX REORGANIZE explicit tranzakciókat (például ALTER INDEX egy BEGIN TRAN ... COMMIT/ROLLBACK) használ az alapértelmezett implicit tranzakciós mód helyett, a REORGANIZE zárolási viselkedése korlátozóbbá válik, ami blokkolást okozhat. További információ az implicit tranzakciókról: SET IMPLICIT_TRANSACTIONS.

További információ: Indexkarbantartás optimalizálása a lekérdezési teljesítmény javítása és az erőforrás-felhasználás csökkentése.

REORGANIZE WITH ( LOB_COMPACTION = { ON | KI } )

A sorcentrikus indexekre vonatkozik.

  • RA

    • A nagyméretű objektum (LOB) adattípusait tartalmazó összes lap tömörítését adja meg: kép, szöveg, ntext, varchar(max), nvarchar(max), varbinary(max)és xml. Az adatok tömörítése csökkentheti a lemez adatméretét.
    • Fürtözött index esetén ez tömöríti a táblában található összes LOB-oszlopot.
    • Nemclustered index esetén ez tömöríti az összes olyan LOB-oszlopot, amely nem kulcsalapú (belefoglalt) oszlop az indexben.
    • REORGANIZE ALL LOB tömörítést végez az összes indexen. Ez minden indexhez tömöríti a fürtözött index összes LOB-oszlopát, a mögöttes táblát vagy a nemclustered indexbe foglalt oszlopokat.
  • KI

    • A nagyméretű objektumadatokat tartalmazó lapok nem tömöríthetők.
    • A KI nincs hatással a halomra.

Oszlopcentrikus index ÁTRENDEZÉSE

Oszlopcentrikus indexek esetén REORGANIZE tömöríti az egyes zárt delta sorcsoportokat az oszloptárba tömörített sorcsoportként. A REORGANIZE művelet mindig online történik. Ez azt jelenti, hogy a táblazárolások hosszú távú zárolása nem tartható meg, és a mögöttes tábla lekérdezései vagy frissítései folytatódhatnak a ALTER INDEX REORGANIZE tranzakció során.

További információ: Indexkarbantartás optimalizálása a lekérdezési teljesítmény javítása és az erőforrás-felhasználás csökkentése.

  • REORGANIZE nincs szükség a zárt delta sorcsoportok tömörített sorcsoportokba való áthelyezéséhez. A háttérbeli mozgatási (TM) folyamat rendszeres időközönként felébred, hogy tömörítse a zárt delta sorcsoportokat. Javasoljuk, hogy REORGANIZE használjunk, ha a hajtómunkák lemaradnak. REORGANIZE agresszívabban tömörítheti a sorcsoportokat.
  • Az összes nyitott és zárt sorcsoport tömörítéséhez tekintse meg a REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS)című témakört.

Az SQL Server 2016 (13.x) és újabb verzióiban, az Azure SQL Database-ben és a felügyelt Azure SQL-példányban lévő oszlopcentrikus indexek esetében REORGANIZE a következő extra töredezettségmentesítési optimalizálást végzi online:

  • Fizikailag eltávolítja a törölt sorokat egy sorcsoportból, ha 10% vagy több sor logikailag törölve lett. A törölt bájtok a fizikai adathordozón lesznek helyreállítva. Ha például egy 1 millió sorból álló tömörített sorcsoport 100 000 sort töröl, az adatbázismotor eltávolítja a törölt sorokat, és újra összenyomja a sorcsoportot 900 000 sortal.

  • Egy vagy több tömörített sorcsoport összefűzésével sorcsoportonként legfeljebb 1 048 576 sorra növelheti a sorokat. Ha például 5 köteget importál 102 400 sorból, 5 tömörített sorcsoportot kap. Ha REORGANIZEfuttat, ezek a sorcsoportok 1 tömörített sorcsoportba egyesülnek 512 000 sortal. Ez feltételezi, hogy nincsenek szótárméret- vagy memóriakorlátozások.

  • Azon sorcsoportok esetében, amelyekben 10% vagy több sor logikailag törölve lett, az adatbázismotor megpróbálja kombinálni ezt a sorcsoportot egy vagy több sorcsoporttal. Az 1. sorcsoportot például 500 000 sor tömöríti, a 21. sorcsoport pedig legfeljebb 1 048 576 sort tömörít. A 21. sorcsoport 60% törölt sorból 409 830 sort hagy. Az adatbázismotor a két sorcsoport kombinálását részesíti előnyben egy új sorcsoport tömörítéséhez, amely 909 830 sorból áll.

REORGANIZE WITH ( COMPRESS_ALL_ROW_GROUPS = { ON | KI } )

Oszlopcentrikus indexekre vonatkozik.

A következőkre vonatkozik: SQL Server 2016 (13.x) és újabb verziók, az Azure SQL Database és a felügyelt Azure SQL-példány

COMPRESS_ALL_ROW_GROUPS lehetővé teszi, hogy a nyitott vagy zárt delta sorcsoportokat az oszloptárba kényszerítse. Ezzel a beállítással nem szükséges újraépíteni az oszlopcentrikus indexet a deltasorcsoportok kiürítéséhez. A többi eltávolítási és egyesítési töredezettségmentesítési funkcióval kombinálva a legtöbb esetben már nem szükséges újraépíteni egy oszlopcentrikus indexet.

  • RA

    Az összes sorcsoportot az oszloptárba kényszeríti, mérettől és állapottól függetlenül (zárt vagy nyitott).

  • KI

    Az összes lezárt sorcsoportot az oszloptárba kényszeríti.

További információ: Indexkarbantartás optimalizálása a lekérdezési teljesítmény javítása és az erőforrás-felhasználás csökkentése.

SET ( <set_index beállítás> [ ,... n ] )

Módosítja az indexbeállításokat az index újraépítése vagy átrendezése nélkül. SET nem adható meg letiltott indexhez.

PAD_INDEX = { ON | KI }

Az indexek kitöltését adja meg. Az alapértelmezett érték a OFF.

  • RA

    A kitöltési tényező által megadott szabad terület százalékos aránya az index közbenső szintű lapjaira lesz alkalmazva. Ha FILLFACTOR nincs megadva egyszerre, PAD_INDEXONértékre van állítva, a rendszer a sys.indexes kitöltési tényező értékét használja.

  • KI

    A köztes szintű lapok kapacitása megközelíti a kapacitást, és elegendő helyet hagy az index által megengedett legnagyobb méretű sornak, figyelembe véve a köztes lapok kulcskészletét. Ez akkor is előfordul, ha PAD_INDEXON van beállítva, de a kitöltési tényező nincs megadva.

További információ: CREATE INDEX.

FILLFACTOR = fillfactor

Ez a százalék azt jelzi, hogy az adatbázismotor mennyire legyen teljes az egyes indexlapok levélszintjének az index létrehozása vagy módosítása során. A fillfactor értéke 1 és 100 közötti egész szám lehet. Az alapértelmezett érték 0. A 0 és a 100 kitöltési tényező értéke minden tekintetben megegyezik.

Explicit FILLFACTOR beállítás csak az index első létrehozásakor vagy újraépítésekor érvényes. Az adatbázismotor nem tartja dinamikusan a lapokban megadott üres terület százalékos arányát. További információ: CREATE INDEX.

A kitöltési tényező beállításának megtekintéséhez használja a sys.indexesfill_factor.

Fontos

Egy 100-nál kisebb FILLFACTOR rendelkező index létrehozása növeli az adatok által elfoglalt tárterületet, mivel az adatbázismotor az index létrehozásakor vagy újraépítésekor a kitöltési tényezőnek megfelelően terjeszti újra az adatokat.

SORT_IN_TEMPDB = { ON | KI }

Megadja, hogy az ideiglenes rendezési eredményeket a tempdbtárolja-e. Az alapértelmezett érték OFF, kivéve az Azure SQL Database rugalmas skálázását. A rugalmas skálázásban lévő összes index-összeállítási művelet esetében SORT_IN_TEMPDB mindig ON, hacsak nem használ újrahasználható index buildet. Az újra felhasználható index buildek esetében SORT_IN_TEMPDB mindig OFF.

  • RA

    Az index létrehozásához használt köztes rendezési eredményeket a rendszer tempdbtárolja. Ez csökkentheti az index létrehozásához szükséges időt. Ez azonban növeli az index buildelése során használt lemezterületet.

  • KI

    A köztes rendezési eredmények ugyanabban az adatbázisban vannak tárolva, mint az index.

Ha nincs szükség rendezési műveletre, vagy ha a rendezés végrehajtható a memóriában, a rendszer figyelmen kívül hagyja a SORT_IN_TEMPDB beállítást.

További információt az indexek SORT_IN_TEMPDB beállításában talál.

IGNORE_DUP_KEY = { ON | KI }

Megadja a hibaválaszt, amikor egy beszúrási művelet ismétlődő kulcsértékeket próbál beszúrni egy egyedi indexbe. A IGNORE_DUP_KEY beállítás csak az index létrehozása vagy újraépítése után történő beszúrási műveletekre vonatkozik. Az alapértelmezett érték a OFF.

  • RA

    Figyelmeztető üzenet jelenik meg, ha ismétlődő kulcsértékeket szúr be egy egyedi indexbe. Csak az egyediségi korlátozást megsértő sorok nincsenek beszúrva.

  • KI

    Hibaüzenet jelenik meg, ha ismétlődő kulcsértékeket szúr be egy egyedi indexbe. A teljes INSERT művelet vissza lesz állítva.

IGNORE_DUP_KEY nem állítható be ON nézeten létrehozott indexekhez, nem egyedi indexekhez, XML-indexekhez, térbeli indexekhez és szűrt indexekhez.

Az index IGNORE_DUP_KEY beállításának megtekintéséhez használja a ignore_dup_key oszlopot a sys.indexes katalógusnézetben.

A visszamenőlegesen kompatibilis szintaxisban a WITH IGNORE_DUP_KEY egyenértékű a WITH IGNORE_DUP_KEY = ON.

STATISTICS_NORECOMPUTE = { ON | KI }

Tiltsa le vagy engedélyezze az index statisztikáinak automatikus statisztikai frissítési beállítását AUTO_STATISTICS_UPDATE. Az alapértelmezett érték a OFF.

  • RA

    Az index újraépítése után az automatikus statisztikai frissítések le lesznek tiltva.

  • KI

    Az index újraépítése után az automatikus statisztikai frissítések engedélyezve lesznek.

Az automatikus statisztikák frissítésének visszaállításához állítsa a STATISTICS_NORECOMPUTEOFF, vagy hajtsa végre a UPDATE STATISTICS a NORECOMPUTE záradék nélkül.

Figyelmeztetés

Ha STATISTICS_NORECOMPUTE = ONbeállításával letiltja a statisztikák automatikus újraszámítását, megakadályozhatja, hogy a lekérdezésoptimalizáló optimális végrehajtási terveket válasszon a táblát érintő lekérdezésekhez.

A STATISTICS_NORECOMPUTEON beállítása nem akadályozza meg az index-újraépítési művelet során előforduló indexstatisztikák frissítését.

STATISTICS_INCREMENTAL = { ON | KI }

A következővonatkozik: SQL Server 2014 (12.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány

Ha ON, az indexen létrehozott statisztikák partícióstatisztikánként jelennek meg. Ha OFF, a rendszer elveti a meglévő statisztikákat, és az adatbázismotor újrafordítja a statisztikákat. Az alapértelmezett érték a OFF.

Ha a partíciónkénti statisztikák nem támogatottak, a beállítás figyelmen kívül lesz hagyva, és figyelmeztetés jön létre. A növekményes statisztikák nem támogatottak a következő esetekben:

  • Olyan indexekkel létrehozott statisztikák, amelyek nincsenek partícióhoz igazítva az alaptáblához
  • A rendelkezésre állási csoport olvasható másodlagos adatbázisaihoz létrehozott statisztikák
  • Írásvédett adatbázisokon létrehozott statisztikák
  • Szűrt indexeken létrehozott statisztikák
  • Nézeteken létrehozott statisztikák
  • Belső táblákon létrehozott statisztikák
  • Térbeli indexekkel vagy XML-indexekkel létrehozott statisztikák

ONLINE = { ON | KI }

Megadja, hogy a mögöttes táblák és a kapcsolódó indexek elérhetők-e a lekérdezésekhez és az adatok módosításához az indexművelet során. Az alapértelmezett érték a OFF.

XML-index vagy térbeli index esetén csak ONLINE = OFF támogatott, és ha ONLINEON hiba jelentkezik.

Fontos

Az online indexelési műveletek nem érhetők el a Microsoft SQL Server minden kiadásában. Az SQL Server kiadásai által támogatott funkciók listáját az SQL Server 2022 Kiadásai és támogatott funkciói című témakörben találja.

  • RA

    A hosszú távú táblazárolások nem az indexművelet időtartamára vannak tárolva. Az indexművelet fő fázisában csak a szándék megosztott (IS) zárolása van tárolva a forrástáblában. Ez lehetővé teszi a mögöttes tábla és indexek lekérdezéseinek vagy frissítéseinek folytatását. A művelet kezdetén egy megosztott (S) zárolás van tárolva a forrásobjektumon egy rövid ideig. A művelet végén, rövid ideig egy megosztott (S) zárolást szerez be az objektumon, ha nemclustered index jön létre. A rendszer sémamódosítási (Sch-M) zárolást szerez be a fürtözött indexek létrehozásakor vagy online elvetésekor, valamint egy fürtözött vagy nemclustered index újraépítésekor. ONLINE nem állítható be ON, ha indexet hoz létre egy helyi ideiglenes táblában.

    Megjegyzés

    A WAIT_AT_LOW_PRIORITY beállítással csökkentheti vagy elkerülheti a blokkolást az online indexműveletek során. További információ: WAIT_AT_LOW_PRIORITY online indexműveletekkel.

  • KI

    A rendszer táblazárolásokat alkalmaz az indexművelet időtartamára. Egy offline indexművelet, amely fürtözött, térbeli vagy XML-indexet hoz létre, újraépít vagy elvet, vagy újjáépít vagy elvet egy nemclustered indexet, sémamódosítási (Sch-M) zárolást szerez be a táblán. Ez megakadályozza, hogy a művelet időtartama alatt minden felhasználó hozzáférjen a mögöttes táblához. Egy offline indexművelet, amely nem kizárólagos indexet hoz létre, először egy megosztott (S) zárolást szerez be a táblán. Ez megakadályozza az alapul szolgáló tábladefiníció módosítását, de lehetővé teszi a tábla adatainak olvasását és módosítását, miközben az index összeállítása folyamatban van.

További információ: Indexműveletek online végrehajtása és online indexelési műveletekre vonatkozó irányelvek.

Az indexek, beleértve a globális ideiglenes táblák indexeit is, online újraépíthetők, kivéve a következő eseteket:

  • XML-index
  • Indexelés helyi ideiglenes táblán
  • Kezdeti egyedi fürtözött index egy nézetben
  • Letiltott fürtözött indexek
  • Fürtözött oszlopcentrikus indexek az SQL Server 2017 -ben (14.x)) és korábbi verzióiban
  • Nemclustered columnstore indexek az SQL Server 2016 (13.x)) és a korábbi verziókban
  • Fürtözött index, ha az alapul szolgáló tábla LOB adattípusokat (kép, ntext, szöveg) és térbeli adattípusokat tartalmaz
  • varchar(max) és varbinary(max) oszlop nem lehet indexkulcs része. Ha egy tábla varchar(max) vagy varbinary(max) oszlopokat tartalmaz, az SQL Serverben (az SQL Server 2012-től kezdve (11.x)), az Azure SQL Database-ben és az Azure SQL Managed Instance-ben is létrehozhat vagy újraépíthet egy más oszlopokat tartalmazó fürtözött indexet a ONLINE beállítással.

További információ: Az online indexműveletek működése.

RESUMABLE = { ON | KI}

A következővonatkozik: SQL Server 2017 (14.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány

Megadja, hogy egy online indexművelet folytatható-e.

  • RA

    Az indexművelet folytatható.

  • KI

    Az indexművelet nem folytatható újra.

MAX_DURATION = idő [PERC] RESUMABLE = ON (ONLINE = ONszükséges)

A következővonatkozik: SQL Server 2017 (14.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány

Azt adja meg, hogy mennyi ideig, egész perc alatt hajt végre egy újraműveleti indexelési műveletet a szüneteltetés előtt.

ALLOW_ROW_LOCKS = { ON | KI }

Megadja, hogy engedélyezettek-e a sorzárolások. Az alapértelmezett érték a ON.

  • RA

    Az index elérésekor sorzárolások engedélyezettek. Az adatbázismotor határozza meg a sorzárolások használatát.

  • KI

    A sorzárak nem használhatók.

ALLOW_PAGE_LOCKS = { ON | KI }

Megadja, hogy engedélyezettek-e az oldalzárolások. Az alapértelmezett érték a ON.

  • RA

    Az index elérésekor az oldalzárolások engedélyezettek. Az adatbázismotor határozza meg az oldalzárolások használatát.

  • KI

    Az oldalzárakat nem használja a rendszer.

OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | KI }

A következővonatkozik: SQL Server 2019 (15.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány

Itt adhatja meg, hogy optimalizálja-e az utolsó oldal beszúrásának elkerülését. Az alapértelmezett érték a OFF. További információ: Szekvenciális kulcsok.

MAXDOP = max_degree_of_parallelism

Felülbírálja az indexművelet maximális párhuzamossági fokát. További információ: A kiszolgáló konfigurációs beállításainak maximális fokának konfigurálása. A MAXDOP használatával korlátozhatja a párhuzamosság mértékét és az eredményként kapott erőforrás-felhasználást az index buildelési műveletéhez.

Bár a MAXDOP beállítás szintaktikailag támogatott az összes XML-indexhez és térbeli indexhez, ALTER INDEX jelenleg csak egyetlen processzort használ.

max_degree_of_parallelism lehet:

  • 1

    Letiltja a párhuzamos tervgenerálást.

  • >1

    A párhuzamos indexműveletekben használt párhuzamosság maximális fokát a megadott számra vagy annál kisebbre korlátozza az aktuális rendszerterhelés alapján.

  • 0 (alapértelmezett)

    A kiszolgáló, adatbázis vagy számítási feladatcsoport szintjén megadott párhuzamosság mértékét használja, kivéve, ha az aktuális rendszerterhelés alapján csökken.

További információ: Párhuzamos indexelési műveletek konfigurálása.

Megjegyzés

A párhuzamos indexműveletek nem érhetők el az SQL Server minden kiadásában. Az SQL Server kiadásai által támogatott funkciók listáját az SQL Server 2022 Kiadásai és támogatott funkciói című témakörben találja.

COMPRESSION_DELAY = { 0 | időtartam [ perc ] }

A következőkre vonatkozik: SQL Server (kezdve az SQL Server 2016 -tól (13.x)), az Azure SQL Database-től és a felügyelt Azure SQL-példánytól

Oszlopcentrikus indexet tartalmazó lemezalapú tábla esetén meghatározza, hogy a zárt állapotban lévő delta sorcsoportnak minimálisan hány percig kell a deltatárolóban maradnia, mielőtt az adatbázismotor tömörítené egy tömörített sorcsoportba. Mivel a lemezalapú táblák nem követik nyomon az egyes sorok beszúrási és frissítési idejét, az adatbázismotor ezt a késést csak a zárt állapotú deltatároló sorcsoportokra alkalmazza.

Az alapértelmezett érték 0 perc.

A COMPRESSION_DELAYhasználatának időpontjával kapcsolatos javaslatokért lásd: A columnstore használatának első lépései a valós idejű operatív elemzési.

DATA_COMPRESSION

Megadja a megadott index, partíciószám vagy partíciótartomány adattömörítési beállítását. A lehetőségek a következők:

  • Egyik sem

    Az index vagy a megadott partíciók nincsenek tömörítve. Ez nem vonatkozik az oszlopcentrikus indexekre.

  • SOR

    Az index vagy a megadott partíciók sortömörítéssel vannak tömörítve. Ez nem vonatkozik az oszlopcentrikus indexekre.

  • OLDAL

    Az index vagy a megadott partíciók laptömörítéssel vannak tömörítve. Ez nem vonatkozik az oszlopcentrikus indexekre.

  • COLUMNSTORE

    A következővonatkozik: SQL Server 2014 (12.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány

    Csak oszlopcentrikus indexekre vonatkozik, beleértve a nemclustered columnstore és a fürtözött oszlopcentrikus indexeket is. A COLUMNSTORE megadása eltávolítja az összes többi adattömörítést, beleértve a COLUMNSTORE_ARCHIVE.

  • COLUMNSTORE_ARCHIVE

    A következővonatkozik: SQL Server 2014 (12.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány

    Csak oszlopcentrikus indexekre vonatkozik, beleértve a nemclustered columnstore és a fürtözött oszlopcentrikus indexeket is. COLUMNSTORE_ARCHIVE a megadott partíciót kisebb méretűre tömöríti. Ez felhasználható archiválásra vagy más olyan helyzetekre, amelyek kisebb tárterületet igényelnek, és több időt engedhetnek meg a tárolásra és a lekérésre.

További információ a tömörítésről: Adattömörítési.

XML_COMPRESSION

A következővonatkozik: SQL Server 2022 (16.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány

Megadja a megadott index XML-tömörítési beállítását, amely egy vagy több xml adattípus-oszlopot tartalmaz. A lehetőségek a következők:

  • RA

    Az index vagy a megadott partíciók XML-tömörítéssel vannak tömörítve.

  • KI

    Az index vagy a megadott partíciók nincsenek tömörítve.

PARTÍCIÓKON ( { <partition_number_expression> | <tartomány> } [ ,... n ] )

Meghatározza azokat a partíciókat, amelyekre a DATA_COMPRESSION vagy XML_COMPRESSION beállítások vonatkoznak. Ha az index nincs particionálva, a ON PARTITIONS argumentum hibát okoz. Ha a ON PARTITIONS záradék nincs megadva, a DATA_COMPRESSION vagy XML_COMPRESSION beállítás a particionált index összes partíciójára vonatkozik.

<partition_number_expression> a következő módokon adhatók meg:

  • Adja meg egy partíció számát, például: ON PARTITIONS (2).
  • Adja meg a partíciószámokat több, vesszővel elválasztott partícióhoz, például: ON PARTITIONS (1, 5).
  • Adja meg a tartományokat és az egyes partíciókat: ON PARTITIONS (2, 4, 6 TO 8).

<range> a TOszó által elválasztott partíciószámokként is megadható, például: ON PARTITIONS (6 TO 8).

Ha különböző típusú adattömörítést szeretne beállítani a különböző partíciókhoz, adja meg többször a DATA_COMPRESSION beállítást, például:

SQL
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)
);

A XML_COMPRESSION lehetőséget többször is megadhatja, például:

SQL
REBUILD WITH
(
XML_COMPRESSION = OFF ON PARTITIONS (1),
XML_COMPRESSION = ON ON PARTITIONS (2, 4, 6 TO 8),
XML_COMPRESSION = OFF ON PARTITIONS (3, 5)
);

ÚJRAKEZD

A következővonatkozik: SQL Server 2017 (14.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány

Folytatja a manuálisan szüneteltetett indexelési műveletet, mert elérte a maximális időtartamot, vagy hiba miatt.

  • MAX_DURATION

    Azt adja meg, hogy mennyi ideig, egész perc alatt futtassa a rendszer az újrakezdhető indexelési műveletet a folytatás után, mielőtt újra szünetelteti.

  • WAIT_AT_LOW_PRIORITY

    Az index buildelési műveletének szüneteltetése után újra meg kell szereznie a szükséges zárolásokat. WAIT_AT_LOW_PRIORITY azt jelzi, hogy az index buildelési művelete alacsony prioritású zárolásokat szerez be, amelyek lehetővé teszik más műveletek folytatását, miközben az index buildelési művelete várakozik. A WAIT_AT_LOW_PRIORITY lehetőség kihagyása egyenértékű a WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE). További információ: WAIT_AT_LOW_PRIORITY.

SZÜNET

A következővonatkozik: SQL Server 2017 (14.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány

Szünetelteti a folytatható indexépítési műveletet.

ELVETÉL

A következővonatkozik: SQL Server 2017 (14.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány

Megszakít egy futó vagy szüneteltetett index buildelési műveletet, amely újrakezdhetőként lett elindítva. Explicit módon végre kell hajtania egy ABORT parancsot, hogy leállítson egy ismételhető index buildelési műveletet. Egy ismételhető indexművelet meghibásodása vagy szüneteltetése nem szünteti meg a végrehajtást; ehelyett határozatlan ideig szünetelteti a műveletet.

Megjegyzések

ALTER INDEX nem használható index újraparticionálására vagy másik fájlcsoportba való áthelyezésére. Ez az utasítás nem használható az indexdefiníció módosítására, például oszlopok hozzáadására vagy törlésére vagy az oszlopsorrend módosítására. A műveletek végrehajtásához használja a CREATE INDEX a DROP_EXISTING záradékot.

Ha nincs explicit módon megadva egy beállítás, az aktuális beállítás lesz alkalmazva. Ha például egy FILLFACTOR beállítás nincs megadva a REBUILD záradékban, a rendszerkatalógusban tárolt kitöltési tényező értékét használja a rendszer az újraépítési folyamat során. Az aktuális indexbeállítások megtekintéséhez használja sys.indexes.

A ONLINE, MAXDOPés SORT_IN_TEMPDB értékei nem találhatók meg a rendszerkatalógusban. Ha az indexelési utasítás nem adja meg, a beállítás alapértelmezett értéke lesz használva.

A többprocesszoros számítógépeken, ahogyan más lekérdezések is teszik, ALTER INDEX REBUILD automatikusan több processzort használ az index módosításával társított vizsgálati és rendezési műveletek végrehajtásához. Ezzel szemben a ALTER INDEX REORGANIZE egyetlen szálas művelet. További információ: Párhuzamos indexelési műveletek konfigurálása.

A Microsoft Fabric SQL-adatbázisában a ALTER INDEX ALL nem támogatott, de ALTER INDEX <index name>.

Indexek újraépítése

Az indexek újraépítése és az index újbóli létrehozása. Ez eltávolítja a töredezettséget, visszanyeri a lemezterületet úgy, hogy tömöríti a lapokat a megadott vagy meglévő kitöltési tényező beállítása alapján, és átrendezi az index sorait egybefüggő lapokban. Ha ALL van megadva, a rendszer a tábla összes indexét elveti, és egyetlen tranzakcióban újraépítette. Az idegenkulcs-korlátozásokat nem kell előre elvetni. Ha a 128-as vagy annál nagyobb terjedelmű indexek újraépülnek, az adatbázismotor a tranzakció véglegesítéséig a tényleges oldaleltéréseket és a hozzájuk tartozó zárolásokat is hatástalanítja. További információ: Halasztott felszabadítási.

További információ: Indexkarbantartás optimalizálása a lekérdezési teljesítmény javítása és az erőforrás-felhasználás csökkentése.

Indexek átrendezése

Az index átrendezése minimális rendszererőforrásokat használ. A táblákon és nézeteken lévő fürtözött és nemclustered indexek levélszintjének töredezettségmentesítéséhez fizikailag átrendezi a levélszintű oldalakat a levélcsomópontok logikai, balról jobbra sorrendjének megfelelően. Az átrendezés az indexoldalakat is tömöríti. A tömörítés a meglévő kitöltési tényező értékén alapul.

Ha ALL van megadva, a relációs indexek, a fürtözött és a nemclustered, valamint a tábla XML-indexei újra vannak rendezve. Néhány korlátozásALLmegadásakor.

További információ: Indexkarbantartás optimalizálása a lekérdezési teljesítmény javítása és az erőforrás-felhasználás csökkentése.

Megjegyzés

Rendezett oszlopcentrikus indexet tartalmazó tábla esetén ALTER INDEX REORGANIZE nem rendezi újra az adatokat. Az adatok használatához használja a ALTER INDEX REBUILD.

Indexek letiltása

Az index letiltása megakadályozza, hogy a felhasználók hozzáférjenek az indexhez és a fürtözött indexekhez az alapul szolgáló táblaadatokhoz. Az indexdefiníció a rendszerkatalógusban marad. Ha egy nézetben letilt egy nemclustered indexet vagy fürtözött indexet, az fizikailag törli az indexadatokat. A fürtözött indexek letiltása megakadályozza az adatokhoz való hozzáférést, de az adatok a B-fában maradnak, amíg az indexet el nem vetik vagy újra nem újítják. Annak megtekintéséhez, hogy egy index le van-e tiltva, használja a is_disabled oszlopot a sys.indexes katalógusnézetben.

Megjegyzés

A dokumentáció általában a B-fa kifejezést használja az indexekre hivatkozva. A sorkataszterekben az adatbázismotor egy B+ fát implementál. Ez nem vonatkozik az oszlopcentrikus indexekre vagy a memóriaoptimalizált táblák indexére. További információ: SQL Server és Azure SQL index architektúrája és tervezési útmutatója.

Ha egy tábla tranzakciós replikációs kiadványban található, nem tilthat le egy elsődleges kulcskényszerhez társított indexet. Ezekre az indexekre replikáció szükséges. Egy ilyen index letiltásához először el kell dobnia a táblát a kiadványból. További információ: Adatok és adatbázis-objektumok közzététele.

Az index engedélyezéséhez használja a ALTER INDEX REBUILD utasítást vagy a CREATE INDEX WITH DROP_EXISTING utasítást. A letiltott fürtözött indexek újraépítése nem végezhető el a ONLINE beállítás ONbeállításával. További információ: Indexek és korlátozások letiltása.

Beállítások megadása

Az index újraépítése vagy átrendezése nélkül megadhatja egy adott index ALLOW_ROW_LOCKS, ALLOW_PAGE_LOCKS, OPTIMIZE_FOR_SEQUENTIAL_KEY, IGNORE_DUP_KEYés STATISTICS_NORECOMPUTE beállításait. A program azonnal alkalmazza a módosított értékeket az indexre. A beállítások megtekintéséhez használja a sys.indexes. További információ: Indexbeállítások beállítása.

Sor- és oldalzárolási beállítások

Ha ALLOW_ROW_LOCKS = ON és ALLOW_PAGE_LOCK = ON, sorszintű, oldalszintű és táblázatszintű zárolások engedélyezettek az index elérésekor. Az adatbázismotor kiválasztja a megfelelő zárolást, és eszkalálhatja a zárolást egy sor- vagy oldalzárolásról egy táblázatzárolásra.

Ha ALLOW_ROW_LOCKS = OFF és ALLOW_PAGE_LOCK = OFF, az index elérésekor csak táblaszintű zárolás engedélyezett.

Ha a sor- vagy oldalzárolási beállítások megadásakor ALL van megadva, a rendszer a beállításokat az összes indexre alkalmazza. Ha a mögöttes tábla halom, a beállítások a következő módokon lesznek alkalmazva:

Opció A következőkre vonatkozik:
ALLOW_ROW_LOCKS = ON vagy OFF A halom és az összes társított nemclustered index.
ALLOW_PAGE_LOCKS = ON A halom és az összes társított nemclustered index.
ALLOW_PAGE_LOCKS = OFF A nemclustered indexek, ahol az összes oldalzárolás nem engedélyezett. A halom esetében csak a megosztott (S), a frissítés (U) és a kizárólagos (X) oldalzárolások nem engedélyezettek. Az adatbázismotor belső célokból továbbra is képes a szándéklapzárak (IS, IUvagy IX) beszerzésére.

Figyelmeztetés

Nem ajánlott letiltani a sor- vagy oldalzárolásokat egy indexen. Egyidejűséggel kapcsolatos problémák léphetnek fel, és előfordulhat, hogy bizonyos funkciók nem érhetők el. Az indexek például nem szervezhetők át, ha ALLOW_PAGE_LOCKSOFFvan beállítva.

Online indexelési műveletek

Az indexek újraépítésekor a ONLINE beállítás értéke ON, az indexben lévő adatok, a hozzá tartozó tábla és az ugyanazon a táblán lévő egyéb indexek érhetők el lekérdezésekhez és módosításokhoz. Online is újraépítheti az index egy részét, amely egyetlen partíción található. A kizárólagos táblazárolások csak rövid ideig vannak tárolva az index újraépítésének végén.

Az index átrendezése mindig online történik. A folyamat csak rövid ideig tárolja a zárolásokat, és nem valószínű, hogy blokkolja a lekérdezéseket vagy frissítéseket.

Ugyanazon a táblán vagy táblapartíción egyidejű online indexelési műveleteket csak a következő műveletek végrehajtásakor hajthat végre:

  • Több nemclustered index létrehozása.
  • Különböző indexek átrendezése ugyanazon a táblán.
  • Átrendezi a különböző indexeket, miközben újraépíti az ugyanazon a táblán lévő nem visszacsatoló indexeket.

Az egyidejűleg végrehajtott összes többi online indexművelet meghiúsul. Nem lehet például egyszerre két vagy több indexet újraépíteni ugyanazon a táblán, vagy új indexet létrehozni ugyanazon a táblán lévő meglévő index újraépítése közben.

További információ: Indexműveletek online végrehajtása.

Folytatható indexműveletek

A következővonatkozik: SQL Server 2017 (14.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány

Az online index újraépítését újrakezdheti. Ez azt jelenti, hogy az index újraépítése leállítható, majd később újraindulhat attól a ponttól kezdve, ahol leállt. Az index újraépítésének újrakezdéséhez adja meg a RESUMABLE = ON lehetőséget.

Az újra felhasználható indexműveletekre az alábbi irányelvek vonatkoznak:

  • A RESUMABLE beállítás használatához a ONLINE lehetőséget is használnia kell.
  • A RESUMABLE beállítás nem marad meg egy adott index metaadataiban, és csak az aktuális DDL-utasítás időtartamára vonatkozik. Ezért a RESUMABLE = ON záradékot explicit módon kell megadni az újbóli használhatóság engedélyezéséhez.
  • A MAX_DURATION beállítás két környezetben adható meg:
    • MAX_DURATION a RESUMABLE beállításnál az indexek létrehozásának időintervallumát adja meg. Ez után az idő eltelt, és ha az index buildje továbbra is fut, az szüneteltetve lesz. Ön dönti el, hogy a szüneteltetett index buildje mikor folytatható. A MAX_DURATIONpercekben időnek 0 percnél hosszabbnak kell lennie, és egy hétnél rövidebbnek vagy egyenlőnek kell lennie (7 * 24 * 60 = 10080 perc). Az indexműveletek hosszú szüneteltetése észrevehetően befolyásolhatja egy adott tábla DML-teljesítményét, valamint az adatbázis lemezkapacitását, mivel az eredeti index és az újonnan létrehozott index lemezterületet igényel, és a DML-műveleteknek frissíteniük kell. Ha MAX_DURATION beállítás nincs megadva, az indexművelet a befejezésig vagy a hiba bekövetkezéséig folytatódik.
    • MAX_DURATION a WAIT_AT_LOW_PRIORITY beállításnál azt az időt adja meg, amíg az indexművelet le van tiltva, és a művelet végrehajtása előtt alacsony prioritású zárolásokat használjon. További információ: WAIT_AT_LOW_PRIORITY online indexműveletekkel.
  • Az indexművelet azonnali szüneteltetéséhez végrehajthatja a ALTER INDEX PAUSE parancsot, vagy végrehajthatja a KILL <session_id> parancsot.
  • Az eredeti ALTER INDEX REBUILD utasítás ugyanazon paraméterekkel való ismételt végrehajtása folytatódik egy felfüggesztett index-újraépítési művelettel. A szüneteltetett index-újraépítési műveletet a ALTER INDEX RESUME utasítás végrehajtásával is folytathatja.
  • A ABORT parancs törli az index buildet futtató munkamenetet, és megszakítja az indexműveletet. Megszakított indexművelet nem folytatható.
  • A szüneteltetett index-újraépítési művelet folytatásakor a MAXDOP értéket új értékre módosíthatja. Ha MAXDOP nincs megadva egy szüneteltetett indexművelet folytatásakor, a rendszer az utolsó önéletrajzhoz használt MAXDOP értéket használja. Ha a MAXDOP beállítás egyáltalán nincs megadva egy index-újraépítési művelethez, akkor a rendszer az alapértelmezett értéket használja.

A folytatható indexművelet addig fut, amíg befejeződik, szünetel vagy meghiúsul. Ha a művelet szünetel, hibaüzenet jelenik meg, amely azt jelzi, hogy a művelet szünetelt, és hogy az index újraépítése nem fejeződött be. Ha a művelet meghiúsul, a rendszer hibát is kibocsát.

Annak ellenőrzéséhez, hogy egy indexművelet folytatható műveletként van-e végrehajtva, és az aktuális végrehajtási állapot ellenőrzéséhez használja a sys.index_resumable_operations katalógusnézetet.

Erőforrások

Az újra felhasználható indexműveletekhez a következő erőforrások szükségesek:

  • Az index létrehozásának fenntartásához további térközre van szükség, beleértve a létrehozás szüneteltetésére vonatkozó időt is.
  • További naplóteljesítmény a rendezési fázisban. Az újrahasználható index teljes naplóterület-kihasználtsága alacsonyabb a normál online index-újraépítéshez képest, és lehetővé teszi a naplók csonkolását a művelet során.
  • Az újraépítés alatt álló indexet vagy a hozzá tartozó táblát az indexművelet szüneteltetése közben módosítani próbáló DDL-utasítások nem engedélyezettek.
  • A ghost cleanup le van tiltva a buildben lévő indexen mind a szüneteltetett, mind a művelet futtatása közben.
  • Ha a tábla LOB oszlopokat tartalmaz, az újrakezdhető fürtözött indexek létrehozása sémamódosítási (Sch-M) zárolást igényel a művelet elején.

Jelenlegi funkcionális korlátozások

Az újrakezdhető index-újraépítési műveletekre a következő korlátozások vonatkoznak:

  • A SORT_IN_TEMPDB = ON beállítás nem támogatott az újraművelt indexműveletek esetében.
  • A RESUMABLE = ON rendelkező DDL-parancs nem hajtható végre explicit tranzakción belül.
  • Nem hozható létre újra felhasználható index, amely a következőket tartalmazza:
    • Számított vagy időbélyeg/sorfordítási oszlopokat kulcsoszlopként.
    • LOB oszlop belefoglalt oszlopként.
  • A folytatható indexműveletek nem támogatottak:
    • A ALTER INDEX REBUILD ALL parancs
    • A ALTER TABLE REBUILD parancs
    • Oszlopcentrikus indexek
    • Szűrt indexek
    • Letiltott indexek

online indexelési műveletek WAIT_AT_LOW_PRIORITY

A következővonatkozik: SQL Server 2014 (12.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány

Ha nem használja a WAIT_AT_LOW_PRIORITY beállítást, a táblán vagy indexen zárolt összes aktív blokkoló tranzakciónak be kell fejeződnie ahhoz, hogy az index újraépítési művelete elinduljon és befejeződjön. Amikor az online indexművelet elindul, és a művelet befejeződik, be kell szereznie egy megosztott (S) vagy sémamódosítást (Sch-M) a táblára, és rövid ideig tárolnia kell. Annak ellenére, hogy a zárolás csak rövid ideig van tárolva, jelentősen befolyásolhatja a számítási feladatok átviteli sebességét, növelheti a lekérdezés késését, vagy végrehajtási időtúllépéseket okozhat.

A problémák elkerülése érdekében a WAIT_AT_LOW_PRIORITY lehetőség lehetővé teszi az online indexművelet indításához és befejezéséhez szükséges S vagy Sch-M zárolások viselkedésének kezelését, három lehetőség közül választva. Minden esetben, ha a MAX_DURATION = n [minutes] által megadott várakozási idő alatt nincs olyan blokkolás, amely az indexművelettel jár, az indexművelet azonnal folytatódik.

WAIT_AT_LOW_PRIORITY az online indexelési műveletet alacsony prioritású zárolások használatával várja meg, így a normál prioritású zárolásokat használó egyéb műveletek addig is folytatva lesznek. A WAIT_AT_LOW_PRIORITY lehetőség kihagyása egyenértékű a WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE).

MAX_DURATION = idő [MINUTES]

Az a várakozási idő (percekben megadott egész szám), amelyet az online indexművelet alacsony prioritású zárolások használatával vár. Ha a művelet MAX_DURATION időre le van tiltva, a megadott ABORT_AFTER_WAIT műveletet hajtja végre. MAX_DURATION idő mindig percekben van, és a MINUTES szó kihagyható.

ABORT_AFTER_WAIT = [NONE | SELF | BLOCKERS ]

  • NONE: Folytassa a várakozást a normál prioritású zárolásra.
  • SELF: Lépjen ki az aktuálisan végrehajtott online indexműveletből anélkül, hogy bármilyen műveletet végrehajtanál. A SELF beállítás nem használható, ha MAX_DURATION 0.
  • BLOCKERS: Tiltsa le az összes olyan felhasználói tranzakciót, amely letiltja az online indexelési műveletet a művelet folytatásához. A BLOCKERS beállításhoz a CREATE INDEX vagy ALTER INDEX utasítást végrehajtó tagnak rendelkeznie kell a ALTER ANY CONNECTION engedéllyel.

A következő kiterjesztett események segítségével figyelheti az indexműveleteket, amelyek alacsony prioritású zárolásokra várnak:

  • lock_request_priority_state
  • process_killed_by_abort_blockers
  • ddl_with_wait_at_low_priority

Térbeli indexkorlátozások

Térbeli index újraépítésekor a mögöttes felhasználói tábla nem érhető el az indexművelet során.

A felhasználói tábla PRIMARY KEY kényszere nem módosítható, amíg a térbeli index a tábla egyik oszlopában van definiálva. A PRIMARY KEY korlátozás módosításához először vesse el a tábla minden térbeli indexét. A PRIMARY KEY kényszer módosítása után újra létrehozhatja az egyes térbeli indexeket.

Egyetlen partíció-újraépítési műveletben nem adhat meg térbeli indexeket. Azonban térbeli indexeket is megadhat a táblák újraépítésében.

A térbeli indexre jellemző beállítások ( például BOUNDING_BOX vagy GRID) módosításához használhat egy DROP_EXISTING = ONmeghatározó CREATE SPATIAL INDEX utasítást, vagy elvetheti a térbeli indexet, és létrehozhat egy újat. Példa: CREATE SPATIAL INDEX.

Adattömörítés

További információ az adattömörítésről: Adattömörítési.

Az adattömörítés használatakor az index buildelési műveleteinek kontextusában az alábbiakat érdemes figyelembe venni:

  • A tömörítéssel több sor tárolható egy lapon, de a maximális sorméretet nem módosítja.
  • Az index nem levéloldalai nem tömörített lapok, hanem sorsűríthetők.
  • Minden nemclustered index egyedi tömörítési beállítással rendelkezik, és nem örökli az alapul szolgáló tábla tömörítési beállítását.
  • Ha egy halomra fürtözött indexet hoz létre, a fürtözött index örökli a halom tömörítési állapotát, hacsak nincs megadva másik tömörítési állapot.

A particionált indexek újraépítésére az alábbi szempontok vonatkoznak:

  • Egyetlen partíció tömörítési beállítását nem módosíthatja, ha a tábla nem számított indexeket tartalmaz.
  • A ALTER INDEX <index> ... REBUILD PARTITION ... WITH DATA_COMPRESSION = ... szintaxis újraépíti az index megadott partícióját a megadott tömörítési beállítással. Ha a WITH DATA_COMPRESSION záradék nincs megadva, a rendszer a meglévő tömörítési beállítást használja.
  • A ALTER INDEX <index> ... REBUILD PARTITION = ALL szintaxis újraépíti az index összes partícióját a meglévő tömörítési beállítások használatával.
  • A ALTER INDEX <index> ... REBUILD PARTITION = ALL (WITH ...) szintaxis újraépíti az index összes partícióját. A DATA_COMPRESSION = ... ON PARTITIONS ( ...) záradék használatával különböző tömörítést választhat a különböző partíciókhoz.

Annak kiértékeléséhez, hogy a PAGE és ROW tömörítésének módosítása hogyan hat egy táblára, indexre vagy partícióra, használja a sp_estimate_data_compression_savings tárolt eljárást.

Statisztika

Az index újraépítésekor az index statisztikái a nem particionált indexek teljes vizsgálatával és a particionált indexek alapértelmezett mintavételezési arányával frissülnek. Az index-újraépítés részeként a táblán nem frissülnek más statisztikák.

Engedélyek

A tábla vagy nézet ALTER engedélyére van szükség.

Verziójegyzetek

  • Az Azure SQL Database nem támogatja a PRIMARYkívüli fájlcsoportokat.
  • Az Azure SQL Database és a felügyelt Azure SQL-példány nem támogatja FILESTREAM beállításokat.
  • Az oszlopcentrikus indexek nem érhetők el az SQL Server 2012 (11.x) előtt.
  • Az újra felhasználható indexműveletek az SQL Server 2017 (14.x) és újabb verzióiban, az Azure SQL Database-ben és a felügyelt Azure SQL-példányban érhetők el.

Példa alapszintű szintaxisra

SQL
ALTER INDEX index1 ON table1 REBUILD;
ALTER INDEX ALL ON table1 REBUILD;
ALTER INDEX ALL ON dbo.table1 REBUILD;

Példák: Oszlopcentrikus indexek

Ezek a példák oszlopcentrikus indexekre vonatkoznak.

Egy. REORGANIZE demo

Ez a példa a ALTER INDEX REORGANIZE parancs működését mutatja be. Létrehoz egy táblát, amely több sorcsoporttal rendelkezik, majd bemutatja, hogy REORGANIZE hogyan egyesítheti a sorcsoportokat.

SQL
-- Create a database
CREATE DATABASE [columnstore];
GO

-- Create a rowstore staging table
CREATE TABLE [staging] (
    AccountKey INT NOT NULL,
    AccountDescription NVARCHAR(50),
    AccountType NVARCHAR(50),
    AccountCodeAlternateKey INT
);

-- Insert 10 million rows into the staging table.
DECLARE @loop INT;
DECLARE @AccountDescription VARCHAR(50);
DECLARE @AccountKey INT;
DECLARE @AccountType VARCHAR(50);
DECLARE @AccountCode INT;

SELECT @loop = 0

BEGIN TRANSACTION

WHILE (@loop < 300000)
BEGIN
    SELECT @AccountKey = CAST(RAND() * 10000000 AS INT);
    SELECT @AccountDescription = 'accountdesc ' + CONVERT(VARCHAR(20), @AccountKey);
    SELECT @AccountType = 'AccountType ' + CONVERT(VARCHAR(20), @AccountKey);
    SELECT @AccountCode = CAST(RAND() * 10000000 AS INT);

    INSERT INTO staging
    VALUES (
        @AccountKey,
        @AccountDescription,
        @AccountType,
        @AccountCode
     );

    SELECT @loop = @loop + 1;
END

COMMIT

-- Create a table for the clustered columnstore index
CREATE TABLE cci_target (
    AccountKey INT NOT NULL,
    AccountDescription NVARCHAR(50),
    AccountType NVARCHAR(50),
    AccountCodeAlternateKey INT
);

-- Convert the table to a clustered columnstore index named inxcci_cci_target;
CREATE CLUSTERED COLUMNSTORE INDEX idxcci_cci_target ON cci_target;

Sorok párhuzamos beszúrása a TABLOCK beállítással. Az SQL Server 2016-tól (13.x) kezdve a INSERT INTO művelet párhuzamosan is futtatható TABLOCK használatakor.

SQL
INSERT INTO cci_target WITH (TABLOCK)
SELECT TOP 300000 * FROM staging;

Futtassa ezt a parancsot a OPEN delta sorcsoportok megtekintéséhez. A sorcsoportok száma a párhuzamosság mértékétől függ.

SQL
SELECT *
FROM sys.dm_db_column_store_row_group_physical_stats
WHERE object_id  = object_id('cci_target');

A parancs futtatásával kényszerítse az összes CLOSED és OPEN sorcsoportot az oszloptárba.

SQL
ALTER INDEX idxcci_cci_target ON cci_target REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON);

Futtassa újra ezt a parancsot, és láthatja, hogy a kisebb sorcsoportok egyetlen tömörített sorcsoportba vannak egyesítve.

SQL
ALTER INDEX idxcci_cci_target ON cci_target REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON);

B. ZÁRT deltasorcsoportok tömörítése az oszloptárba

Ez a példa a REORGANIZE beállítással tömöríti az egyes CLOSED delta sorcsoportokat tömörített sorcsoportként az oszloptárba. Ez nem szükséges, de akkor hasznos, ha a mozgató nem tömöríti elég gyorsan CLOSED sorcsoportokat.

Mindkét példát futtathatja a AdventureWorksDW2022 mintaadatbázisban.

Ez a minta REORGANIZE futtat az összes partíción.

SQL
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE;

Ez a minta egy adott partíción futtat REORGANIZE.

SQL
-- REORGANIZE a specific partition
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE PARTITION = 0;

C. Az összes OPEN AND CLOSED delta sorcsoport tömörítése az oszloptárba

A következőkre vonatkozik: SQL Server 2016 (13.x) és újabb verziók, az Azure SQL Database és a felügyelt Azure SQL-példány

A parancs REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON) tömöríti az egyes OPEN és CLOSED delta sorcsoportokat tömörített sorcsoportként az oszloptárba. Ez kiüríti a deltastore-t, és az összes sort az oszloptárba való tömörítésre kényszeríti. Ez különösen akkor hasznos, ha sok beszúrási műveletet hajt végre, mivel ezek a műveletek egy vagy több delta sorcsoportban tárolják a sorokat.

REORGANIZE sorcsoportokat egyesít a sorcsoportok maximális számának kitöltéséhez, <= 1 024 576. Ezért ha az összes OPEN és CLOSED sorcsoportot tömöríti, akkor nem lesz sok tömörített sorcsoport, amelyekben csak néhány sor található. Azt szeretné, hogy a sorcsoportok a lehető legteljesebbek legyenek a tömörített méret csökkentése és a lekérdezési teljesítmény javítása érdekében.

Az alábbi példák a AdventureWorksDW2022 adatbázist használják.

Ez a példa az összes OPEN és CLOSED deltasorcsoportot az oszlopcentrikus indexbe helyezi át.

SQL
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON);

Ez a példa az összes OPEN és CLOSED deltasorcsoportot egy adott partíció oszlopcentrikus indexébe helyezi át.

SQL
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE PARTITION = 0 WITH (COMPRESS_ALL_ROW_GROUPS = ON);

D. Oszlopcentrikus index online töredezettségmentesítése

Nem vonatkozik: SQL Server 2012 (11.x) és SQL Server 2014 (12.x).

Az SQL Server 2016 -tól kezdve (13.x) a REORGANIZE nem csak a deltasorcsoportokat tömöríti az oszloptárba. Online töredezettségmentesítést is végez. Először is csökkenti az oszloptár méretét azáltal, hogy fizikailag eltávolítja a törölt sorokat, amikor egy sorcsoport 10% vagy több sorát törölték. Ezután egyesíti a sorcsoportokat, hogy nagyobb sorcsoportokat alakítson ki, amelyek sorcsoportonként legfeljebb 1 024 576 sort alkotnak. A módosított sorcsoportok újra lesznek tömörítve.

Megjegyzés

Az SQL Server 2016 -tól kezdve (13.x) a legtöbb esetben már nem szükséges újraépíteni egy oszlopcentrikus indexet, mivel REORGANIZE fizikailag eltávolítja a törölt sorokat, és egyesíti a sorcsoportokat. A COMPRESS_ALL_ROW_GROUPS beállítás az összes OPEN vagy CLOSED deltasorcsoportot az oszloptárba kényszeríti, amelyet korábban csak újraépítéssel lehetett elvégezni. REORGANIZE online állapotban van, és a háttérben történik, így a lekérdezések a művelet során folytatódhatnak.

Az alábbi példa egy REORGANIZE hajt végre az index töredezettségmentesítéséhez azáltal, hogy fizikailag eltávolítja a táblából logikailag törölt sorokat, és egyesít sorcsoportokat.

SQL
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE;

E. Fürtözött oszlopcentrikus index offline újraépítése

A következőkre vonatkozik: SQL Server, Azure SQL Database és Felügyelt Azure SQL-példány

Tipp

Az SQL Server 2016 -tól (13.x) és az Azure SQL Database-ben az oszlopcentrikus indexek ALTER INDEX REBUILD helyett ALTER INDEX REORGANIZE használatát javasoljuk.

Megjegyzés

Az SQL Server 2012 (11.x) és az SQL Server 2014 (12.x) REORGANIZE csak CLOSED sorcsoportok oszloptárba való tömörítésére szolgál. A töredezettségmentesítési műveletek végrehajtásának és az összes delta sorcsoport oszloptárba való kényszerítésének egyetlen módja az index újraépítése.

Ez a példa bemutatja, hogyan építhet újra egy fürtözött oszlopcentrikus indexet, és hogyan kényszerítheti az összes delta sorcsoportot az oszloptárba. Ez az első lépés egy tábla FactInternetSales2 készít elő a AdventureWorksDW2022-adatbázisban egy fürtözött oszlopcentrikus indexkel, és beszúrja az első négy oszlop adatait.

SQL
CREATE TABLE dbo.FactInternetSales2 (
    ProductKey [int] NOT NULL,
    OrderDateKey [int] NOT NULL,
    DueDateKey [int] NOT NULL,
    ShipDateKey [int] NOT NULL);

CREATE CLUSTERED COLUMNSTORE INDEX cci_FactInternetSales2
ON dbo.FactInternetSales2;

INSERT INTO dbo.FactInternetSales2
SELECT ProductKey, OrderDateKey, DueDateKey, ShipDateKey
FROM dbo.FactInternetSales;

SELECT * FROM sys.column_store_row_groups;

Az eredmények egy OPEN sorcsoportot mutatnak, ami azt jelenti, hogy az SQL Server több sort vár a sorcsoport bezárása előtt, és áthelyezi az adatokat az oszloptárba. Ez a következő utasítás újraépíti a fürtözött oszlopcentrikus indexet, amely az összes sort az oszloptárba kényszeríti.

SQL
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REBUILD;
SELECT * FROM sys.column_store_row_groups;

A SELECT utasítás eredményei azt mutatják, hogy a sorcsoport COMPRESSED, ami azt jelenti, hogy a sorcsoport oszlopszegmensei mostantól tömörítve és tárolva lesznek az oszloptárban.

F. Fürtözött oszlopcentrikus index partíciójának offline újraépítése

A következővonatkozik: SQL Server 2012 (11.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány

Egy nagy fürtözött oszlopcentrikus index partíciójának újraépítéséhez használja a ALTER INDEX REBUILD a partícióbeállítással. Ez a példa újraépíti a 12. partíciót. Az SQL Server 2016 -tól kezdve (13.x) javasoljuk, hogy cserélje le REBUILDREORGANIZE.

SQL
ALTER INDEX cci_fact3
ON fact3
REBUILD PARTITION = 12;

G. Fürtözött oszlopcentrikus index módosítása archiválási tömörítés használatára

Nem vonatkozik az: SQL Server 2012 (11.x)

A fürtözött oszlopcentrikus indexek méretét még tovább csökkentheti a COLUMNSTORE_ARCHIVE adattömörítési beállítással. Ez olyan régebbi adatok esetében praktikus, amelyeket olcsóbban szeretne tárolni. Ezt csak olyan adatokon javasoljuk, amelyekhez nem férnek hozzá gyakran, mivel a tömörítés lassabb, mint a normál COLUMNSTORE tömörítés.

Az alábbi példa újraépít egy fürtözött oszlopcentrikus indexet az archiválási tömörítés használatához, majd bemutatja, hogyan távolítható el az archiválási tömörítés. A végeredmény csak oszlopcentrikus tömörítést használ.

Először készítse elő a példát egy fürtözött oszlopcentrikus indexet tartalmazó táblázat létrehozásával. Ezután archiválási tömörítéssel tömörítse tovább a táblázatot.

SQL
--Prepare the example by creating a table with a clustered columnstore index.
CREATE TABLE SimpleTable (
    ProductKey [int] NOT NULL,
    OrderDateKey [int] NOT NULL,
    DueDateKey [int] NOT NULL,
    ShipDateKey [int] NOT NULL
);

CREATE CLUSTERED INDEX cci_SimpleTable ON SimpleTable (ProductKey);

CREATE CLUSTERED COLUMNSTORE INDEX cci_SimpleTable
ON SimpleTable
WITH (DROP_EXISTING = ON);

--Compress the table further by using archival compression.
ALTER INDEX cci_SimpleTable ON SimpleTable
REBUILD
WITH (DATA_COMPRESSION = COLUMNSTORE_ARCHIVE);
GO

Ez a minta eltávolítja az archív tömörítést, és csak oszlopcentrikus tömörítést használ.

SQL
ALTER INDEX cci_SimpleTable ON SimpleTable
REBUILD
WITH (DATA_COMPRESSION = COLUMNSTORE);
GO

Példák: Rowstore-indexek

Egy. Index újraépítése

Az alábbi példa egyetlen indexet épít újra a AdventureWorks2022 adatbázis Employee tábláján.

SQL
ALTER INDEX PK_Employee_EmployeeID ON HumanResources.Employee REBUILD;

B. A tábla összes indexének újraépítése és a beállítások megadása

Az alábbi példa a ALLkulcsszót adja meg. Ez újraépíti az AdventureWorks2022 adatbázis Production.Product táblához társított összes indexet. Három lehetőség van megadva.

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

Az alábbi példa hozzáadja az ONLINE lehetőséget, beleértve az alacsony prioritású zárolási beállítást, és hozzáadja a sortömörítési beállítást.

A következővonatkozik: SQL Server 2014 (12.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány

SQL
ALTER INDEX ALL ON Production.Product
REBUILD WITH
(
    FILLFACTOR = 80,
    SORT_IN_TEMPDB = ON,
    STATISTICS_NORECOMPUTE = ON,
    ONLINE = ON ( WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 4 MINUTES, ABORT_AFTER_WAIT = BLOCKERS ) ),
    DATA_COMPRESSION = ROW
);

C. Index átrendezése LOB tömörítéssel

Az alábbi példa egyetlen fürtözött indexet rendez át a AdventureWorks2022 adatbázisban. Mivel az index egy LOB adattípust tartalmaz a levélszinten, az utasítás a nagyméretű objektumadatokat tartalmazó összes lapot is tömöríti. A WITH (LOB_COMPACTION = ON) beállítás megadása nem kötelező, mert az alapértelmezett érték be van kapcsolva.

SQL
ALTER INDEX PK_ProductPhoto_ProductPhotoID ON Production.ProductPhoto REORGANIZE WITH (LOB_COMPACTION = ON);

D. Beállítások megadása indexen

Az alábbi példa több beállítást is beállít az index AK_SalesOrderHeader_SalesOrderNumber az AdventureWorks2022 adatbázisban.

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

E. Index letiltása

Az alábbi példa letilt egy nemclustered indexet a AdventureWorks2022 adatbázis Employee táblájában.

SQL
ALTER INDEX IX_Employee_ManagerID ON HumanResources.Employee DISABLE;

F. Korlátozások letiltása

Az alábbi példa letilt egy PRIMARY KEY korlátozást a PRIMARY KEY index letiltásával az AdventureWorks2022 adatbázisban. Az alapul szolgáló táblára vonatkozó FOREIGN KEY korlátozás automatikusan le van tiltva, és figyelmeztető üzenet jelenik meg.

SQL
ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department DISABLE;

Az eredményhalmaz ezt a figyelmeztető üzenetet adja vissza.

Output
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. Korlátozások engedélyezése

Az alábbi példa lehetővé teszi az F példában letiltott PRIMARY KEY és FOREIGN KEY korlátozásokat.

A PRIMARY KEY korlátozás a PRIMARY KEY index újraépítésével engedélyezve van.

SQL
ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department REBUILD;

Ezután engedélyezve van a FOREIGN KEY korlátozás.

SQL
ALTER TABLE HumanResources.EmployeeDepartmentHistory
CHECK CONSTRAINT FK_EmployeeDepartmentHistory_Department_DepartmentID;
GO

H. Particionált index újraépítése

Az alábbi példa a particionált index egyetlen partícióját, 5, a particionált index IX_TransactionHistory_TransactionDate újraépíti a AdventureWorks2022 adatbázisban. Az 5. partíció újraépítése ONLINE=ON történik, és az alacsony prioritású zárolás 10 perces várakozási ideje külön vonatkozik az index újraépítési művelete által beszerzett összes zárolásra. Ha ez idő alatt a zárolás nem érhető el az index újraépítésének befejezéséhez, maga az újraépítési műveleti utasítás megszakad a ABORT_AFTER_WAIT = SELFmiatt.

A következővonatkozik: SQL Server 2014 (12.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány

SQL
-- 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
   WITH (ONLINE = ON (WAIT_AT_LOW_PRIORITY (MAX_DURATION = 10 minutes, ABORT_AFTER_WAIT = SELF)));
GO

Én. Index tömörítési beállításának módosítása

Az alábbi példa újraépít egy indexet egy nem particionált sortártáblán.

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

J. Index beállításának módosítása XML-tömörítéssel

A következővonatkozik: SQL Server 2022 (16.x) és újabb verziók, Azure SQL Database és felügyelt Azure SQL-példány.

Az alábbi példa újraépít egy indexet egy nem particionált sortártáblán.

SQL
ALTER INDEX IX_INDEX1
ON T1
REBUILD
WITH (XML_COMPRESSION = ON);
GO

További adattömörítési példákért lásd: Adattömörítési.

K. Online újrakezdhető index

A következővonatkozik: SQL Server 2017 (14.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány

Az alábbi példák bemutatják, hogyan használható az online újrakezdhető index.

Hajtsa végre az online index újraépítését MAXDOP = 1. Ha egy indexművelet szüneteltetése után ismét végrehajtja ugyanazt a parancsot, automatikusan folytatja az index újraépítési műveletét.

SQL
ALTER INDEX test_idx on test_table REBUILD WITH (ONLINE = ON, MAXDOP = 1, RESUMABLE = ON);

Hajtsa végre az online index újraépítését folytatható műveletként, MAX_DURATION 240 percre van állítva.

SQL
ALTER INDEX test_idx on test_table REBUILD WITH (ONLINE = ON, RESUMABLE = ON, MAX_DURATION = 240);

Szüneteltesse a futó újrakezdhető online indexek újraépítését.

SQL
ALTER INDEX test_idx on test_table PAUSE;

Folytassa az online index-újraépítést egy olyan index-újraépítéshez, amelyet folytatható műveletként hajtottak végre, és a MAXDOP új értékét 4 értékre állítja.

SQL
ALTER INDEX test_idx on test_table RESUME WITH (MAXDOP = 4);

Folytassa az online index-újraépítési műveletet egy újrakezdhetőként végrehajtott index online újraépítéséhez. Állítsa a MAXDOP 2-re, állítsa be az index futási idejét 240 percre, és ha egy index le van tiltva a zároláson, várjon 10 percet, és utána ölje meg az összes blokkolót.

SQL
ALTER INDEX test_idx on test_table
    RESUME WITH (MAXDOP = 2, MAX_DURATION = 240 MINUTES,
    WAIT_AT_LOW_PRIORITY (MAX_DURATION = 10, ABORT_AFTER_WAIT = BLOCKERS));

Megszakítható újrakezdhető index-újraépítési művelet, amely fut vagy szüneteltetve van.

SQL
ALTER INDEX test_idx on test_table ABORT;