esemény
márc. 31. 23 - ápr. 2. 23
A legnagyobb SQL, Fabric és Power BI tanulási esemény. Március 31. – Április 2. A FABINSIDER kóddal 400 dollárt takaríthat meg.
Regisztráljon még maEzt a böngészőt már nem támogatjuk.
Frissítsen a Microsoft Edge-re, hogy kihasználhassa a legújabb funkciókat, a biztonsági frissítéseket és a technikai támogatást.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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 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 }
}
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.
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_LOCKS OFF |
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 ALL
PARTITION = <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 ALL
PARTITION
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.
Az adatbázis neve.
Annak a sémának a neve, amelyhez a tábla vagy nézet tartozik.
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ó.
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:
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.
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.
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 indexek esetén REORGANIZE
határozza meg az index levélszintjének átrendezéséhez. A REORGANIZE
művelet a következő:
ALTER INDEX REORGANIZE
tranzakció során.ALLOW_PAGE_LOCKS
OFF
van beá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.
A sorcentrikus indexekre vonatkozik.
RA
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
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 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 REORGANIZE
futtat, 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.
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.
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.
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_INDEX
ON
é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_INDEX
ON
van beállítva, de a kitöltési tényező nincs megadva.
További információ: CREATE INDEX.
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.indexes
fill_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.
Megadja, hogy az ideiglenes rendezési eredményeket a tempdb
tá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 tempdb
tá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.
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
.
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_NORECOMPUTE
OFF
, vagy hajtsa végre a UPDATE STATISTICS
a NORECOMPUTE
záradék nélkül.
Figyelmeztetés
Ha STATISTICS_NORECOMPUTE = ON
beá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_NORECOMPUTE
ON
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.
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:
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 ONLINE
ON
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:
ONLINE
beállítással.További információ: Az online indexműveletek működése.
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.
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.
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.
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.
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.
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.
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_DELAY
haszná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.
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.
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.
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:
ON PARTITIONS (2)
.ON PARTITIONS (1, 5)
.ON PARTITIONS (2, 4, 6 TO 8)
.
<range>
a TO
szó á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)
);
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.
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.
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.
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>
.
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.
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ásALL
megadá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
.
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 ON
beállításával. További információ: Indexek és korlátozások letiltá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.
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 , IU vagy 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_LOCKS
OFF
van beállítva.
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:
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.
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:
RESUMABLE
beállítás használatához a ONLINE
lehetőséget is használnia kell.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.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_DURATION
percekben 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.ALTER INDEX PAUSE
parancsot, vagy végrehajthatja a KILL <session_id>
parancsot.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.ABORT
parancs törli az index buildet futtató munkamenetet, és megszakítja az indexműveletet. Megszakított indexművelet nem folytatható.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.
Az újra felhasználható indexműveletekhez a következő erőforrások szükségesek:
Sch-M
) zárolást igényel a művelet elején.Az újrakezdhető index-újraépítési műveletekre a következő korlátozások vonatkoznak:
SORT_IN_TEMPDB = ON
beállítás nem támogatott az újraművelt indexműveletek esetében.RESUMABLE = ON
rendelkező DDL-parancs nem hajtható végre explicit tranzakción belül.ALTER INDEX REBUILD ALL
parancsALTER TABLE REBUILD
parancsA 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 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 = ON
meghatározó CREATE SPATIAL INDEX
utasítást, vagy elvetheti a térbeli indexet, és létrehozhat egy újat. Példa: CREATE SPATIAL INDEX.
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 particionált indexek újraépítésére az alábbi szempontok vonatkoznak:
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.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.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.
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.
A tábla vagy nézet ALTER
engedélyére van szükség.
PRIMARY
kívüli fájlcsoportokat.FILESTREAM
beállításokat.ALTER INDEX index1 ON table1 REBUILD;
ALTER INDEX ALL ON table1 REBUILD;
ALTER INDEX ALL ON dbo.table1 REBUILD;
Ezek a példák oszlopcentrikus indexekre vonatkoznak.
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);
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.
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;
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.
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);
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.
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE;
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.
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.
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 REBUILD
REORGANIZE
.
ALTER INDEX cci_fact3
ON fact3
REBUILD PARTITION = 12;
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
Az alábbi példa egyetlen indexet épít újra a AdventureWorks2022
adatbázis Employee
tábláján.
ALTER INDEX PK_Employee_EmployeeID ON HumanResources.Employee REBUILD;
Az alábbi példa a ALL
kulcsszó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.
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
);
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.
ALTER INDEX PK_ProductPhoto_ProductPhotoID ON Production.ProductPhoto REORGANIZE WITH (LOB_COMPACTION = ON);
Az alábbi példa több beállítást is beállít az index AK_SalesOrderHeader_SalesOrderNumber
az AdventureWorks2022
adatbázisban.
ALTER INDEX AK_SalesOrderHeader_SalesOrderNumber ON
Sales.SalesOrderHeader
SET (
STATISTICS_NORECOMPUTE = ON,
IGNORE_DUP_KEY = ON,
ALLOW_PAGE_LOCKS = ON
) ;
GO
Az alábbi példa letilt egy nemclustered indexet a AdventureWorks2022
adatbázis Employee
táblájában.
ALTER INDEX IX_Employee_ManagerID ON HumanResources.Employee DISABLE;
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.
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'.
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
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 = SELF
miatt.
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
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
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.
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;
esemény
márc. 31. 23 - ápr. 2. 23
A legnagyobb SQL, Fabric és Power BI tanulási esemény. Március 31. – Április 2. A FABINSIDER kóddal 400 dollárt takaríthat meg.
Regisztráljon még ma