Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Vonatkozik a következőkre:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analitikai Platform System (PDW)
SQL adatbázis a Microsoft Fabric-ben
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
Syntax
Szintaxis az SQL Serverhez, az Azure SQL Database-hez és a felügyelt Azure SQL-példányhoz.
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.
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 }
}
Arguments
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.
ALL
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 |
ONLINE = ON |
XML-index Térbeli index Oszlopcentrikus index |
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.
PARTITION
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.
Warning
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ésXML_COMPRESSIONazok 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.
DISABLE
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 REORGANIZEtranzakció 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.
Note
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.
ON
- 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 ALLLOB 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.
OFF
- 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.
-
REORGANIZEnincs 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, hogyREORGANIZEhasználjunk, ha a hajtómunkák lemaradnak.REORGANIZEagresszí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.
ON
Az összes sorcsoportot az oszloptárba kényszeríti, mérettől és állapottól függetlenül (zárt vagy nyitott).
OFF
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.
ON
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
FILLFACTORnincs megadva egyszerre,PAD_INDEXONértékre van állítva, a rendszer a sys.indexes kitöltési tényező értékét használja.OFF
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_INDEXONvan 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 fill_factorsys.indexes.
Important
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.
ON
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.OFF
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.
ON
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.
OFF
Hibaüzenet jelenik meg, ha ismétlődő kulcsértékeket szúr be egy egyedi indexbe. A teljes
INSERTmű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.
ON
Az index újraépítése után az automatikus statisztikai frissítések le lesznek tiltva.
OFF
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.
Warning
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.
Important
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.
ON
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.ONLINEnem állítható beON, ha indexet hoz létre egy helyi ideiglenes táblában.Note
A
WAIT_AT_LOW_PRIORITYbeá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.OFF
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
ONLINEbeá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.
ON
Az indexművelet folytatható.
OFF
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.
ON
Az index elérésekor sorzárolások engedélyezettek. Az adatbázismotor határozza meg a sorzárolások használatát.
OFF
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.
ON
Az index elérésekor az oldalzárolások engedélyezettek. Az adatbázismotor határozza meg az oldalzárolások használatát.
OFF
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.
Note
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:
NONE
Az index vagy a megadott partíciók nincsenek tömörítve. Ez nem vonatkozik az oszlopcentrikus indexekre.
ROW
Az index vagy a megadott partíciók sortömörítéssel vannak tömörítve. Ez nem vonatkozik az oszlopcentrikus indexekre.
PAGE
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
COLUMNSTOREmegadása eltávolítja az összes többi adattömörítést, beleértve aCOLUMNSTORE_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_ARCHIVEa 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:
ON
Az index vagy a megadott partíciók XML-tömörítéssel vannak tömörítve.
OFF
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:
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:
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)
);
RESUME
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_PRIORITYazt 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. AWAIT_AT_LOW_PRIORITYlehetőség kihagyása egyenértékű aWAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE). További információ: WAIT_AT_LOW_PRIORITY.
PAUSE
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.
ABORT
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.
Remarks
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.
Az SQL adatbázisban a Microsoft Fabric-ben nem ALTER INDEX ALL támogatott, de ALTER INDEX <index name> igen.
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 újraszervezé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.
Note
Rendezett oszlopcentrikus indexet tartalmazó tábla esetén ALTER INDEX REORGANIZE nem rendezi újra az adatokat. Az adatok használatához használja a CREATE [CLUSTERED] COLUMNSTORE INDEX ... ORDER (...) ... WITH (DROP_EXISTING = ON).
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.
Note
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:
| Option | 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. |
Warning
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
RESUMABLEbeállítás használatához aONLINElehetőséget is használnia kell. - A
RESUMABLEbeá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 aRESUMABLE = ONzáradékot explicit módon kell megadni az újbóli használhatóság engedélyezéséhez. - A
MAX_DURATIONbeállítás két környezetben adható meg:-
MAX_DURATIONaRESUMABLEbeá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ó. AMAX_DURATIONidő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. HaMAX_DURATIONbeállítás nincs megadva, az indexművelet a befejezésig vagy a hiba bekövetkezéséig folytatódik. -
MAX_DURATIONaWAIT_AT_LOW_PRIORITYbeá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 PAUSEparancsot, vagy végrehajthatja aKILL <session_id>parancsot. - Az eredeti
ALTER INDEX REBUILDutasí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 aALTER INDEX RESUMEutasítás végrehajtásával is folytathatja. - A
ABORTparancs 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. HaMAXDOPnincs megadva egy szüneteltetett indexművelet folytatásakor, a rendszer az utolsó önéletrajzhoz használtMAXDOPértéket használja. Ha aMAXDOPbeá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.
Resources
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 = ONbeállítás nem támogatott az újraművelt indexműveletek esetében. - A
RESUMABLE = ONrendelkező 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 ALLparancs - A
ALTER TABLE REBUILDparancs - Oszlopos adattárolású indexek
- Szűrt indexek
- Letiltott indexek
- A
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. ASELFbeállítás nem használható, haMAX_DURATION0. -
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. ABLOCKERSbeállításhoz aCREATE INDEXvagyALTER INDEXutasítást végrehajtó tagnak rendelkeznie kell aALTER ANY CONNECTIONengedé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_stateprocess_killed_by_abort_blockersddl_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 CREATE SPATIAL INDEXmeghatározó DROP_EXISTING = ON 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 aWITH DATA_COMPRESSIONzá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 = ALLszintaxis ú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. ADATA_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.
Permissions
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
FILESTREAMbeá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
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.
A. 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.
-- 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.
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.
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.
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.
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 AdventureWorksDW2025 mintaadatbázisban.
Ez a minta REORGANIZE futtat az összes partíción.
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE;
Ez a minta egy adott partíción futtat REORGANIZE.
-- 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 AdventureWorksDW2025 adatbázist használják.
Ez a példa az összes OPEN és CLOSED deltasorcsoportot az oszlopcentrikus indexbe helyezi át.
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.
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.
Note
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.
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
Tip
Az SQL Server 2016 -tól (13.x) és az Azure SQL Database-ben az oszlopcentrikus indexek ALTER INDEX REORGANIZE helyett ALTER INDEX REBUILD használatát javasoljuk.
Note
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 AdventureWorksDW2025-adatbázisban egy fürtözött oszlopcentrikus indexkel, és beszúrja az első négy oszlop adatait.
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.
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.
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.
--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.
ALTER INDEX cci_SimpleTable ON SimpleTable
REBUILD
WITH (DATA_COMPRESSION = COLUMNSTORE);
GO
Példák: Rowstore-indexek
A. Index újraépítése
Az alábbi példa egyetlen indexet épít újra a Employee adatbázis AdventureWorks2025 tábláján.
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 Production.Product adatbázis AdventureWorks2025 táblához társított összes indexet. Három lehetőség van megadva.
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
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 AdventureWorks2025 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.
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 AdventureWorks2025 adatbázisban.
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 Employee adatbázis AdventureWorks2025 táblájában.
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 AdventureWorks2025 adatbázisban. Az alapul szolgáló táblára vonatkozó FOREIGN KEY korlátozás automatikusan le van tiltva, és figyelmeztető üzenet jelenik meg.
ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department DISABLE;
Az eredményhalmaz ezt a figyelmeztető üzenetet adja vissza.
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.
ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department REBUILD;
Ezután engedélyezve van a FOREIGN KEY korlátozás.
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 AdventureWorks2025 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
-- 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
I. 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.
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.
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.
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.
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.
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.
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.
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.
ALTER INDEX test_idx on test_table ABORT;
Kapcsolódó tartalom
- SQL Server és Az Azure SQL index architektúrája és tervezési útmutatója
- Indexműveletek online végrehajtása
- INDEX LÉTREHOZÁSA (Transact-SQL)
- TÉRBELI INDEX LÉTREHOZÁSA (Transact-SQL)
- XML-INDEX LÉTREHOZÁSA (Transact-SQL)
- DROP INDEX (Transact-SQL)
- Indexek és korlátozások letiltása
- XML-indexek (SQL Server)
- 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
- sys.dm_db_index_physical_stats (Transact-SQL)
- ESEMÉNYADATOK (Transact-SQL)