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.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
SQL-adatbázis a Microsoft Fabricben
Sortártáblát fürtözött oszlopcentrikus indexpé alakíthat át, vagy létrehozhat egy nemclustered oszlopcentrikus indexet. Oszlopcentrikus index használatával hatékonyan futtathat valós idejű üzemeltetési elemzéseket egy OLTP-számítási feladaton, vagy javíthatja az adattömörítési és lekérdezési teljesítményt az adattárház-számítási feladatok esetében.
Kövesse az oszlopcentrikus indexek újdonságát a funkció legújabb fejlesztéseihez.
A rendezett fürtözött oszlopcentrikus indexek az SQL Server 2022-ben (16.x) lettek bevezetve. További információ: CREATE COLUMNSTORE INDEX. A rendezett oszloptárolós indexek elérhetőségéről további információért lásd a(z) Oszloptár indexek: Áttekintés.
Az SQL Server 2016 -tól kezdve (13.x) fürtözött oszlopcentrikus indexként is létrehozhatja a táblát. Már nem szükséges először létrehozni egy sortártáblát, majd fürtözött oszlopcentrikus indexpé alakítani.
Az oszlopcentrikus indexek tervezési irányelveit a Columnstore indexek – Tervezési útmutató című témakörben talál.
Transact-SQL szintaxis konvenciók
Szemantika
Az Azure SQL Database és az Azure SQL ManagedInstance AUTD szintaxisa:
-- Create a clustered columnstore index on disk-based table.
CREATE CLUSTERED COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
[ ORDER (column [ , ...n ] ) ]
[ WITH ( <with_option> [ , ...n ] ) ]
[ ON <on_option> ]
[ ; ]
-- Create a nonclustered columnstore index on a disk-based table.
CREATE [ NONCLUSTERED ] COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
( column [ , ...n ] )
[ ORDER (column [ , ...n ] ) ]
[ WHERE <filter_expression> [ AND <filter_expression> ] ]
[ WITH ( <with_option> [ , ...n ] ) ]
[ ON <on_option> ]
[ ; ]
<with_option> ::=
DROP_EXISTING = { ON | OFF } -- default is OFF
| MAXDOP = max_degree_of_parallelism
| ONLINE = { ON | OFF }
| COMPRESSION_DELAY = { 0 | delay [ MINUTES ] }
| DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
[ ON PARTITIONS ( { partition_number_expression | range } [ , ...n ] ) ]
<on_option>::=
partition_scheme_name ( column_name )
| filegroup_name
| "default"
<filter_expression> ::=
column_name IN ( constant [ , ...n ]
| column_name { IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !< } constant )
Az SQL Server szintaxisa:
-- Create a clustered columnstore index on disk-based table.
CREATE CLUSTERED COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
[ WITH ( <with_option> [ , ...n ] ) ]
[ ORDER (column [ , ...n ] ) ]
[ ON <on_option> ]
[ ; ]
-- Create a nonclustered columnstore index on a disk-based table.
CREATE [ NONCLUSTERED ] COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
( column [ , ...n ] )
[ ORDER (column [ , ...n ] ) ]
[ WHERE <filter_expression> [ AND <filter_expression> ] ]
[ WITH ( <with_option> [ , ...n ] ) ]
[ ON <on_option> ]
[ ; ]
<with_option> ::=
DROP_EXISTING = { ON | OFF } -- default is OFF
| MAXDOP = max_degree_of_parallelism
| ONLINE = { ON | OFF }
| COMPRESSION_DELAY = { 0 | delay [ MINUTES ] }
| DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
[ ON PARTITIONS ( { partition_number_expression | range } [ , ...n ] ) ]
<on_option>::=
partition_scheme_name ( column_name )
| filegroup_name
| "default"
<filter_expression> ::=
column_name IN ( constant [ , ...n ]
| column_name { IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !< } constant )
Az Azure Synapse Analytics and Analytics Platform System (PDW) szintaxisa:
CREATE CLUSTERED COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
[ ORDER ( column [ , ...n ] ) ]
[ WITH ( DROP_EXISTING = { ON | OFF } ) ] -- default is OFF
[;]
Verzió rendelkezésre állása
Néhány lehetőség nem érhető el minden adatbázismotor-verzióban. Az alábbi táblázat azokat a verziókat mutatja be, amikor a beállítások a fürtözött oszloptárban és a nemclustered oszlopcentrikus indexekben jelennek meg:
Lehetőség | FÜRTÖZÖTT | NEMCLUSTERED |
---|---|---|
COMPRESSION_DELAY | SQL Server 2016 (13.x) | SQL Server 2016 (13.x) |
adat_tömörítés | SQL Server 2016 (13.x) | SQL Server 2016 (13.x) |
ONLINE | SQL Server 2019 (15.x) | SQL Server 2017 (14.x) |
WHERE feltétel | Nincs adat. | SQL Server 2016 (13.x) |
ORDER záradék | SQL Server 2016 (13.x) | SQL Server 2025 (17.x) előzetes verzió |
Minden lehetőség elérhető az Azure SQL Database-ben és az Azure SQL Managed InstanceAUTD-ben.
A funkciók elérhetőségéről további információt az oszlopcentrikus indexek újdonságai című témakörben talál.
Érvek
FÜRTÖZÖTT OSZLOPCENTRIKUS INDEX LÉTREHOZÁSA
Hozzon létre egy fürtözött oszlopcentrikus indexet, amelyben az összes adat tömörítése és tárolása oszlop szerint történik. Az index tartalmazza a tábla összes oszlopát, és a teljes táblát tárolja. Ha a meglévő tábla halom vagy fürtözött index, akkor a rendszer fürtözött oszlopcentrikus indexgé alakítja. Ha a tábla már fürtözött oszlopcentrikus indexként van tárolva, a rendszer elveti és újraépíti a meglévő indexet.
Fontos
A Fabric SQL Database-ben fürtözött oszlopcentrikus indexet kell létrehozni ugyanabban a kötegben vagy tranzakcióban, amelyhez a táblához tartozik. Ha már létrejött, fürtözött oszlopcentrikus indexet ad hozzá egy táblához, az a következő hibát eredményezheti:
Msg 35354, Level 16, State 1, Line 63, The statement failed because a clustered columnstore index cannot be created on a table enabled for Change Feed. Consider disabling Change Feed and then creating the clustered columnstore index.
index_name
Megadja az új index nevét.
Ha a tábla már tartalmaz fürtözött oszlopcentrikus indexet, megadhatja ugyanazt a nevet, mint a meglévő index, vagy a DROP EXISTING beállítással új nevet adhat meg.
ON [ database_name. [ schema_name ] . | schema_name . ] table_name
A fürtözött oszlopcentrikus indexként tárolni kívánt tábla egy-, két- vagy háromrészes nevét adja meg. Ha a tábla halom, vagy fürtözött indexet tartalmaz, akkor a rendszer sortárból oszlopcentrikussá alakítja a táblát. Ha a tábla már oszloptár, ez az utasítás újraépíti a fürtözött oszlopcentrikus indexet.
ORDER a fürtözött oszloptárhoz
column_store_order_ordinal
A sys.index_columns oszlopával meghatározhatja a fürtözött oszlopcentrikus index oszlopainak sorrendjét. Az oszlopcentrikus rendezés segít a szegmensek megszüntetésében, különösen a sztringadatoknál. További információ: Teljesítmény finomhangolás rendezett oszlopcentrikus indexekkel és oszlopcentrikus indexekkel – Tervezési útmutató.
Rendezett fürtözött oszlopcentrikus indexre való konvertáláshoz a meglévő indexnek fürtözött oszlopcentrikus indexnek kell lennie. Használja a DROP_EXISTING
lehetőséget.
A LOB-adattípusok (a (maximális) hosszúságú adattípusok nem lehetnek a rendezett fürtözött oszlopcentrikus index kulcsai.
Rendezett fürtözött oszlopcentrikus index létrehozásakor használja a MAXDOP = 1
legjobb minőségű rendezés lehetőségét, cserébe az utasítás lényegesen hosszabb időtartamáért CREATE INDEX
. Az index lehető leggyorsabb létrehozásához ne korlátozza a MAXDOP-t. A tömörítés és a rendezés legmagasabb minősége segítheti a lekérdezéseket az oszlopcentrikus indexen.
A rendezett oszloptárolós indexek elérhetőségéről további információért lásd a(z) Oszloptár indexek: Áttekintés.
A WITH beállításai
DROP_EXISTING = [KI] | RA
DROP_EXISTING = ON
a meglévő index elvetésére és egy új oszlopcentrikus index létrehozására.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH (DROP_EXISTING = ON);
Az alapértelmezett DROP_EXISTING = KI, azt várja, hogy az index neve megegyezik a meglévő névvel. Hiba történik, ha a megadott indexnév már létezik.
MAXDOP = max_degree_of_parallelism
Ez a beállítás felülbírálhatja a párhuzamossági kiszolgáló konfigurálásának meglévő maximális szintjét az indexművelet során. A MAXDOP használatával korlátozhatja a párhuzamos terv végrehajtásához használt processzorok számát. A maximális érték 64 processzor.
max_degree_of_parallelism értékek lehetnek:
- 1, ami azt jelenti, hogy el kell tiltani a párhuzamos tervgenerálást.
- >1, ami azt jelenti, hogy a párhuzamos indexműveletekben használt processzorok maximális számát a megadott számra vagy annál kevesebbre korlátozza az aktuális rendszerterhelés alapján. Ha például a MAXDOP = 4, a használt processzorok száma 4 vagy kevesebb.
- 0 (alapértelmezett), ami azt jelenti, hogy a processzorok tényleges számát kell használni, vagy kevesebbet az aktuális rendszerterhelés alapján.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH (MAXDOP = 2);
További információkért lásd a kiszolgáló konfigurációját: a párhuzamosság maximális fokát és a párhuzamos indexelési műveletek konfigurálását.
COMPRESSION_DELAY = 0 | késleltetés [ PERC ]
Lemezalapú tábla esetén a késleltetés azt a minimális percszámot adja meg, amely alatt a lezárt állapotban lévő delta sorcsoportnak a delta sorcsoportban kell maradnia. Az SQL Server ezután tömörítheti a 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 SQL Server a késést a zárt állapotú delta sorcsoportokra alkalmazza.
Az alapértelmezett érték 0 perc.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH ( COMPRESSION_DELAY = 10 MINUTES );
A COMPRESSION_DELAY használatának időpontjával kapcsolatos javaslatokért tekintse meg a Columnstore használatának első lépéseit a valós idejű üzemeltetési elemzésekhez.
DATA_COMPRESSION = COLUMNSTORE | COLUMNSTORE_ARCHIVE
Megadja a megadott tábla, 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:
-
COLUMNSTORE
az alapértelmezett érték, és a legkiemelőbb oszlopcentrikus tömörítéssel történő tömörítést adja meg. Ez a beállítás a tipikus választás. -
COLUMNSTORE_ARCHIVE
a táblázatot vagy partíciót kisebb méretűre tömöríti. Ezt a lehetőséget olyan helyzetekben használhatja, mint az archiválás, amely kisebb tárterületméretet igényel, és több időt biztosít a tárolásra és a lekérésre.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH ( DATA_COMPRESSION = COLUMNSTORE_ARCHIVE );
További információ a tömörítésről: Adattömörítési.
ONLINE = [BE | KI]
-
ON
azt határozza meg, hogy az oszlopcentrikus index online állapotban maradjon és elérhető maradjon, miközben az index új példánya létre van készítve. -
OFF
azt adja meg, hogy az index nem használható az új példány létrehozásakor.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH ( ONLINE = ON );
ON beállítások
Ezekkel a beállításokkal megadhatja az adattárolás beállításait, például egy partíciós sémát, egy adott fájlcsoportot vagy az alapértelmezett fájlcsoportot. Ha nincs megadva az ON beállítás, az index a meglévő tábla beállításpartícióját vagy fájlcsoport-beállításait használja.
partition_scheme_name ( column_name ) a tábla partíciós sémáját adja meg. A partíciósémának már léteznie kell az adatbázisban. A partíciós séma létrehozásához lásd a CREATE PARTITION SCHEME (Transact-SQL) című témakört.
column_name azt az oszlopot adja meg, amely alapján a particionált index particionálásra kerül. Ennek az oszlopnak meg kell egyeznie a partition_scheme_name használt partíciófüggvény argumentumának adattípusával, hosszával és pontosságával.
filegroup_name a fürtözött oszlopcentrikus index tárolására szolgáló fájlcsoportot adja meg. Ha nincs megadva hely, és a tábla nincs particionálva, az index ugyanazt a fájlcsoportot használja, mint az alapul szolgáló tábla vagy nézet. A fájlcsoportnak már léteznie kell.
Ha az indexet az alapértelmezett fájlcsoporton szeretné létrehozni, használja "default"
vagy [default]
. Ha megadja "default"
, a QUOTED_IDENTIFIER
beállításnak az aktuális munkamenethez kell lennie ON
.
QUOTED_IDENTIFIER
alapértelmezés szerint ON
. További információ: SET QUOTED_IDENTIFIER (Transact-SQL).
CREATE [NONCLUSTERED] COLUMNSTORE INDEX
Hozzon létre egy nemclustered oszlopcentrikus indexet egy halomként vagy fürtözött indexként tárolt sortártáblán. Az index szűrt feltétellel rendelkezhet, és nem kell az alapul szolgáló tábla összes oszlopát tartalmaznia. Az oszlopcentrikus index elegendő helyet igényel az adatok másolatának tárolásához. Frissítheti az indexet, és a mögöttes tábla módosításával frissül. A fürtözött indexek nemclustered oszlopcentrikus indexe valós idejű elemzést tesz lehetővé.
index_name
Az index nevét adja meg. index_name egyedinek kell lennie a táblában, de nem kell egyedinek lennie az adatbázisban. Az indexneveknek az azonosítókszabályait kell követnie.
( oszlop [ ,... n ] )
Megadja a tárolni kívánt oszlopokat. A nemclustered oszlopcentrikus index legfeljebb 1024 oszlop lehet.
Minden oszlopnak támogatott adattípusúnak kell lennie az oszlopcentrikus indexekhez. A támogatott adattípusok listájának korlátozásai és korlátozásai .
ON [ database_name. [ schema_name ] . | schema_name . ] table_name
Az indexet tartalmazó tábla egy-, két- vagy háromrészes nevét adja meg.
ORDER for nonclustered columnstore
A nemclustered oszlopcentrikus index záradékában ORDER
megadott oszlopoknak az index kulcsoszlopainak egy részhalmazának kell lenniük.
column_store_order_ordinal
A sys.index_columns oszlopával meghatározhatja a nemclustered columnstore index oszlopainak sorrendjét. Az oszlopcentrikus rendezés segít a szegmensek megszüntetésében, különösen a sztringadatoknál. További információ: Teljesítmény finomhangolás rendezett oszlopcentrikus indexekkel és oszlopcentrikus indexekkel – Tervezési útmutató. Az ezekben a cikkekben szereplő tervezési és teljesítménybeli szempontok általában a fürtözött és a nemclustered oszlopcentrikus indexekre is érvényesek.
A LOB-adattípusok (a (maximális) hosszúságú adattípusok nem lehetnek a rendezett, nemclustered oszlopcentrikus indexek kulcsai.
Rendezett, nemclustered oszlopcentrikus index létrehozásakor használja a MAXDOP = 1
legmagasabb minőségű rendezés beállításait, cserébe az utasítás jelentősen hosszabb időtartamáért CREATE INDEX
. Az index lehető leggyorsabb létrehozásához ne korlátozza a korlátozást MAXDOP
. A tömörítés és a rendezés legmagasabb minősége segítheti a lekérdezéseket az oszlopcentrikus indexen.
A rendezett oszlopalapú index rendelkezésre állásával kapcsolatos információkat a Rendezett oszlopindex rendelkezésre állásicímű témakörben találja.
A WITH beállításai
DROP_EXISTING = [KI] | RA
DROP_EXISTING = ON A meglévő index elvetve és újraépül. A megadott indexnévnek meg kell egyeznie a jelenleg meglévő index nevével; azonban az indexdefiníció módosítható. Megadhat például különböző oszlopokat vagy indexbeállításokat.
DROP_EXISTING = KI
Hiba jelenik meg, ha a megadott indexnév már létezik. Az index típusa nem módosítható DROP_EXISTING használatával. A visszamenőlegesen kompatibilis szintaxisban a WITH DROP_EXISTING egyenértékű a WITH DROP_EXISTING = BE értékekkel.
MAXDOP = max_degree_of_parallelism
Felülbírálja a kiszolgáló konfigurációját: az indexművelet során a párhuzamossági konfiguráció maximális mértéke. A MAXDOP használatával korlátozhatja a párhuzamos terv végrehajtásához használt processzorok számát. A maximális érték 64 processzor.
max_degree_of_parallelism értékek lehetnek:
- 1, ami azt jelenti, hogy el kell tiltani a párhuzamos tervgenerálást.
- >1, ami azt jelenti, hogy a párhuzamos indexműveletekben használt processzorok maximális számát a megadott számra vagy annál kevesebbre korlátozza az aktuális rendszerterhelés alapján. Ha például a MAXDOP = 4, a használt processzorok száma 4 vagy kevesebb.
- 0 (alapértelmezett), ami azt jelenti, hogy a processzorok tényleges számát vagy a jelenlegi rendszerterhelés alapján kevesebbet kell használni.
További információ: Párhuzamos indexelési műveletek konfigurálása.
Megjegyzés:
A párhuzamos indexmű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.
ONLINE = [BE | KI]
-
ON
azt határozza meg, hogy az oszlopcentrikus index online állapotban maradjon és elérhető maradjon, miközben az index új példánya létre van készítve. -
OFF
azt adja meg, hogy az index nem használható az új példány létrehozásakor. Nemclustered index esetén az alaptábla továbbra is elérhető marad. Csak a nemclustered oszlopcentrikus indexet használja a lekérdezések teljesítéséhez, amíg az új index be nem fejeződik.
CREATE COLUMNSTORE INDEX ncci ON Sales.OrderLines (StockItemID, Quantity, UnitPrice, TaxRate)
WITH ( ONLINE = ON );
COMPRESSION_DELAY = 0 | késleltetés [ PERC ]
Megadja, hogy egy sor mennyi ideig maradjon egy delta sorcsoportban, mielőtt jogosult lenne a tömörített sorcsoportba való migrálásra. Például azt mondhatja, hogy ha egy sor 120 percig nem változik, akkor ez a sor oszlopos tárolási formátumba való tömörítésre alkalmas.
Lemezalapú táblák oszlopcentrikus indexe esetén a sor beszúrásának vagy frissítésének időpontja nem lesz nyomon követve. Ehelyett a delta sorcsoport lezárt ideje lesz a sor proxyjaként használva. Az alapértelmezett időtartam 0 perc. A sorokat az oszlopos tárolóba migrálja a rendszer, miután 1 millió sor halmozódott fel a delta sorcsoportban, és bezárva van jelölve.
adat_tömörítés
Megadja a megadott tábla, partíciószám vagy partíciótartomány adattömörítési beállítását. Csak oszlopcentrikus indexekre vonatkozik, beleértve a nemclustered és a fürtözött indexeket is. A lehetőségek a következők:
-
COLUMNSTORE
az alapértelmezett érték, és a legkiemelőbb oszlopcentrikus tömörítéssel történő tömörítést adja meg. Ez a beállítás a tipikus választás. -
COLUMNSTORE_ARCHIVE
a táblázatot vagy partíciót kisebb méretűre tömöríti. Ezt a lehetőséget archiváláshoz vagy más olyan helyzetekhez használhatja, 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.
WHERE <filter_expression> [ AND <filter_expression> ]
A szűrő predikátumának nevezett beállítás meghatározza, hogy mely sorokat vegye fel az indexbe. Az SQL Server szűrt statisztikákat hoz létre a szűrt index adatsoraihoz.
A szűrő predikátum egyszerű összehasonlító logikát használ. A literálokat használó NULL
összehasonlítások nem engedélyezettek az összehasonlító operátorokkal. Használja inkább az és IS NULL
az IS NOT NULL
operátorokat.
Íme néhány példa a táblázat szűrési predikátumára Production.BillOfMaterials
:
WHERE StartDate > '20000101' AND EndDate <= '20000630'
WHERE ComponentID IN (533, 324, 753)
WHERE StartDate IN ('20000404', '20000905') AND EndDate IS NOT NULL
A szűrt indexekre vonatkozó útmutatásért lásd: Szűrt indexek létrehozása.
ON beállítások
Az alábbi beállítások határozzák meg azokat a fájlcsoportokat, amelyeken az index létrejön.
partition_scheme_name ( column_name )
Meghatározza azt a partíciós sémát, amely meghatározza azokat a fájlcsoportokat, amelyekre a particionált index partíciói le vannak képezve. A partíciósémának a CREATE PARTITION SCHEME végrehajtásával kell léteznie az adatbázisban.
column_name azt az oszlopot adja meg, amely alapján a particionált index particionálásra kerül. Ennek az oszlopnak meg kell egyeznie a partition_scheme_name használt partíciófüggvény argumentumának adattípusával, hosszával és pontosságával. column_name nem korlátozódik az indexdefiníció oszlopaira. Oszlopcentrikus index particionálásakor az adatbázismotor hozzáadja a particionálási oszlopot az index oszlopaként, ha még nincs megadva.
Ha a tábla particionált, és nincs megadva partition_scheme_name vagy fájlcsoport , akkor az index ugyanabba a partíciós sémába kerül, és ugyanazt a particionálási oszlopot használja, mint a mögöttes tábla.
A particionált táblák oszlopcentrikus indexét particionáláshoz kell igazítani. További információ az indexek particionálásáról: Particionált táblák és indexek.
filegroup_name
Megadja a fájlcsoport nevét, amelyen létre kívánja hozni az indexet. Ha filegroup_name nincs megadva, és a tábla nincs particionálva, az index ugyanazt a fájlcsoportot használja, mint a mögöttes tábla. A fájlcsoportnak már léteznie kell.
"alapértelmezett"
Létrehozza a megadott indexet az alapértelmezett fájlcsoporton.
Ebben a kontextusban az alapértelmezett kifejezés nem kulcsszó. Ez az alapértelmezett fájlcsoport azonosítója, és el kell tagoltnak lennie, mint a fájlban vagy ON "default"
a fájlbanON [default]
. Ha "default"
meg van adva, a QUOTED_IDENTIFIER beállításnak be kell kapcsolnia az aktuális munkamenethez, ez az alapértelmezett beállítás. További információ: SET QUOTED_IDENTIFIER.
Engedélyek
A táblához ALTER jogosultság szükséges.
Megjegyzések
Oszlopcentrikus indexet ideiglenes táblán is létrehozhat. Amikor a tábla el van vetve, vagy a munkamenet véget ér, az index is el lesz vetve.
A Fabric SQL-adatbázisban a fürtözött oszlopcentrikus indexekkel rendelkező táblák nem lesznek tükrözve a Fabric OneLake-ben.
Szűrt indexek
A szűrt index egy optimalizált, nemclustered index, amely olyan lekérdezésekhez használható, amelyek a tábla sorainak kis százalékát választják ki. Szűrő predikátumot használ a tábla adatainak egy részének indexeléséhez. A jól megtervezett szűrt index javíthatja a lekérdezési teljesítményt, csökkentheti a tárolási költségeket és csökkentheti a karbantartási költségeket.
A szűrt indexekhez szükséges SET-beállítások
A szükséges értékoszlop SET beállításaira az alábbi feltételek bármelyike esetén szükség van:
- Szűrt indexet hoz létre.
- Az INSERT, UPDATE, DELETE vagy MERGE művelet módosítja a szűrt index adatait.
- A lekérdezésoptimalizáló a szűrt index használatával hozza létre a lekérdezéstervet.
BEÁLLÍTÁSOK | Kötelező érték | Alapértelmezett kiszolgálóérték | Alapértelmezett OLE DB- és ODBC-érték | Alapértelmezett DB-Library érték |
---|---|---|---|---|
ANSI_NULLS | RA | RA | RA | KI |
ANSI_PADDING | RA | RA | RA | KI |
ANSI_WARNINGS 1 | RA | RA | RA | KI |
ARITHABORT | RA | RA | KI | KI |
KONKAT_NULL_AD_NULLT_AD | RA | RA | RA | KI |
NUMERIC_ROUNDABORT | KI | KI | KI | KI |
IDÉZETES_AZONOSÍTÓ | RA | RA | RA | KI |
1 Az ANSI_WARNINGS on értékre állítása implicit módon ON értékre állítja az ARITHABORTot, ha az adatbázis kompatibilitási szintje 90 vagy újabb. Ha az adatbázis kompatibilitási szintje 80-ra vagy korábbira van állítva, az ARITHABORT beállítást kifejezetten BE értékre kell állítania.
Ha a SET beállítások helytelenek, a következő feltételek léphetnek fel:
A szűrt index nem jön létre.
Az adatbázismotor hibát okoz, és visszaállítja az indexben adatokat módosító INSERT, UPDATE, DELETE vagy MERGE utasításokat.
A lekérdezésoptimalizáló nem veszi figyelembe a végrehajtási tervben szereplő indexet Transact-SQL utasítások esetében.
A szűrt indexekről további információt a Szűrt indexek létrehozása című témakörben talál.
Korlátozások és korlátozások
Az oszlopcentrikus index minden oszlopának az alábbi gyakori üzleti adattípusok egyikének kell lennie:
- datetimeoffset [ ( n ) ]
- datetime2 [ ( n ) ]
- datetime
- smalldatetime
- dátum
- idő [ ( n ) ]
- float [ ( n ) ]
- real [ ( n ) ]
- decimális [ ( pontosság [ , skálázás ] ) ]
- numerikus [ ( pontosság [ , skálázás ] ) ]
- pénz
- smallmoney
- bigint
- Int
- kisméretű
- tinyint
- bit
- nvarchar [ ( n ) ]
- nvarchar(max)1
- nchar [ ( n ) ]
- varchar [ ( n ) ]
- varchar(max)1
- char [ ( n ) ]
- varbinary [ ( n ) ]
- varbinary(max)1
- bináris [ ( n ) ]
- uniqueidentifier2
1 Az SQL Server 2017 (14.x) és az Azure SQL Database prémium szintű, standard szintű (S3 vagy újabb) szintjén, valamint az összes virtuálismag-ajánlati szintre vonatkozik, csak fürtözött oszlopcentrikus indexekben.
2 Az SQL Server 2014 (12.x) és újabb verzióira vonatkozik.
Ha a mögöttes tábla olyan adattípusú oszlopot tartalmaz, amely nem támogatott az oszlopcentrikus indexek esetében, ezt az oszlopot ki kell hagynia a nemclustered oszlopcentrikus indexből.
A 8 kilobájtnál nagyobb méretű objektumadatokat (LOB) a rendszer soron kívüli, LOB-tárolóban tárolja, csak egy mutatóval az oszlopszegmensben tárolt fizikai helyre. A tárolt adatok méretét nem sys.column_store_segments, sys.column_store_dictionaries vagy sys.dm_db_column_store_row_group_physical_stats jelenti.
Az alábbi adattípusok egyikét használó oszlopok nem vehetők fel oszlopcentrikus indexbe:
- ntext, text és image
- nvarchar(max), varchar(max), és varbinary(max)1
- rowversion (és időbélyeg)
- sql_variant
- CLR-típusok (hierarchia- és térbeli típusok)
- xml
- uniqueidentifier2
1 Az SQL Server 2016 -ra (13.x) és a korábbi verziókra, valamint a nemclustered oszlopcentrikus indexekre vonatkozik.
2 Az SQL Server 2012 -re (11.x) vonatkozik.
Nemclustered columnstore indexek:
- Legfeljebb 1024 oszlop lehet.
- Nem hozható létre kényszeralapú indexként. Egy oszlopcentrikus indexet tartalmazó táblán egyedi megkötések, elsődleges kulcskorlátozások és idegenkulcs-megkötések is lehetnek. A kényszereket mindig sortároló indexekkel kényszeríti ki a rendszer. A korlátozások nem kényszeríthetők oszlopcentrikus (fürtözött vagy nemclustered) indexekkel.
- Ritka oszlopot nem lehet belefoglalni.
- Az ALTER INDEX utasítással nem módosítható. A nemclustered index módosításához inkább az oszlopcentrikus indexet kell elvetnie, majd újra létre kell hoznia. Az ALTER INDEX használatával letilthatja és újraépítheti az oszlopcentrikus indexeket.
- A INCLUDE kulcsszóval nem hozható létre.
- Az indexoszlopok listájában nem lehet megadni a
ASC
kulcsszavakat vagyDESC
a kulcsszavakat. Az oszlopcentrikus indexek a tömörítési algoritmusok szerint vannak rendezve. - Az Azure SQL Database-ben az SQL Database a Microsoft Fabricben, az Azure SQL Managed InstanceAUTD-ben és az SQL Server 2025 (17.x) előzetes verziójában a záradékkal
ORDER
is megrendelhető. További információ: A teljesítmény finomhangolása rendezett oszlopcentrikus indexekkel. - Nem lehet nvarchar(max), varchar(max) és varbinary(max) típusú LOB oszlopokat nem szerepeltetni a nemclustered oszlopcentrikus indexekben. Csak a fürtözött oszlopcentrikus indexek támogatják a LOB-típusokat, kezdve az SQL Server 2017 (14.x) verziójával, az Azure SQL Database-rel (prémium szinten konfigurálva, standard szinten (S3 vagy újabb) és az összes virtuálismag-ajánlati szinttel. A korábbi verziók nem támogatják a LOB-típusokat a fürtözött és nemclustered oszlopcentrikus indexekben.
- Az SQL Server 2016 -tól kezdve (13.x) létrehozhat egy nemclustered oszlopcentrikus indexet indexelt nézetben.
Az oszlopcentrikus indexek nem kombinálhatók a következő szolgáltatásokkal:
- Számított oszlopok. Az SQL Server 2017-től (14.x) kezdődően a fürtözött oszlopcentrikus indexek tartalmazhatnak nem megőrzött számított oszlopokat. Az SQL Server 2017 -ben (14.x) azonban a fürtözött oszlopcentrikus indexek nem tartalmazhatnak tartósan számított oszlopokat, és nem hozhat létre nemclustered indexeket a számított oszlopokon.
- Oldal- és sortömörítés, valamint a vardecimális tárolási formátum. (Egy oszlopcentrikus index már más formátumban van tömörítve.)
- Replikálás fürtözött oszlopcentrikus indexekkel. A nemclustered oszlopcentrikus indexek támogatottak. További információ: sp_addarticle.
- Fájlstream.
Fürtözött oszlopcentrikus indexet tartalmazó táblán nem használhat kurzort vagy eseményindítót. Ez a korlátozás nem vonatkozik a nemclustered oszlopcentrikus indexekre. A kurzorokat és az eseményindítókat nemclustered oszlopcentrikus indexet tartalmazó táblán használhatja.
Az SQL Server 2014 (12.x) konkrét korlátozásai:
Az alábbi korlátozások csak az SQL Server 2014-re (12.x) vonatkoznak. Ebben a kiadásban frissíthető, fürtözött oszlopcentrikus indexeket használhat. A nemclustered oszlopcentrikus indexek továbbra is írásvédettek.
- Változáskövetés. Oszlopcentrikus indexekkel nem használható változáskövetés.
- Adatrögzítés módosítása. Ez a funkció nem engedélyezhető fürtözött oszlopcentrikus indexet tartalmazó táblákon. Az SQL Server 2016-tól (13.x) kezdődően a változásadat-rögzítés engedélyezhető nemclustered oszlopcentrikus indexet tartalmazó táblákon.
- Olvasható másodlagos. A fürtözött oszlopcentrikus index (CCI) nem érhető el az Always On olvasható rendelkezésre állási csoport olvasható másodlagos példányából. A nemclustered columnstore indexet (NCCI) egy olvasható másodlagosról érheti el.
- Több aktív eredményhalmaz (MARS). Az SQL Server 2014 (12.x) ezt a funkciót használja az oszlopcentrikus indexet tartalmazó táblák írásvédett kapcsolataihoz. Az SQL Server 2014 (12.x) azonban nem támogatja ezt a funkciót az oszlopcentrikus indexet tartalmazó táblák egyidejű adatkezelési nyelvi (DML) műveleteihez. Ha erre a célra próbálja használni a szolgáltatást, az SQL Server megszakítja a kapcsolatokat, és megszakítja a tranzakciókat.
- A nemclustered oszlopcentrikus indexek nem hozhatók létre nézeten vagy indexelt nézetben.
Az oszlopcentrikus indexek teljesítménybeli előnyeiről és korlátairól további információt a Columnstore indexek: Áttekintés című témakörben talál.
Metadaták
Az oszlopcentrikus index összes oszlopa a metaadatokban lesz tárolva, a benne foglalt oszlopokként. Az oszlopalapú index nem rendelkezik kulcsoszlopokkal. Az oszlopcentrikus indexekről az alábbi rendszernézetek nyújtanak információt:
- sys.indexes (Transact-SQL)
- sys.index_columns (Transact-SQL)
- sys.partitions (Transact-SQL)
- sys.column_store_segments (Transact-SQL)
- sys.column_store_dictionaries (Transact-SQL)
- sys.column_store_row_groups (Transact-SQL)
Példák: táblázat konvertálása sortárból oszloptárolóvá
Egy. Halom átalakítása fürtözött oszlopcentrikus indexké
Ez a példa halomként hoz létre egy táblát, majd átalakítja egy fürtözött oszlopcentrikus indexre cci_Simple
. A fürtözött oszlopcentrikus index létrehozása a teljes tábla tárolóját sortárról oszloptárra módosítja.
CREATE TABLE dbo.SimpleTable(
ProductKey [INT] NOT NULL,
OrderDateKey [INT] NOT NULL,
DueDateKey [INT] NOT NULL,
ShipDateKey [INT] NOT NULL);
GO
CREATE CLUSTERED COLUMNSTORE INDEX cci_Simple ON dbo.SimpleTable;
GO
B. Fürtözött index konvertálása fürtözött oszlopcentrikus indexgé ugyanazzal a névvel
Ez a példa egy fürtözött indexet tartalmazó táblát hoz létre, majd bemutatja a fürtözött index fürtözött oszlopcentrikus indexké alakításának szintaxisát. A fürtözött oszlopcentrikus index létrehozása a teljes tábla tárolóját sortárról oszloptárra módosítja.
CREATE TABLE dbo.SimpleTable2 (
ProductKey [INT] NOT NULL,
OrderDateKey [INT] NOT NULL,
DueDateKey [INT] NOT NULL,
ShipDateKey [INT] NOT NULL);
GO
CREATE CLUSTERED INDEX cl_simple ON dbo.SimpleTable2 (ProductKey);
GO
CREATE CLUSTERED COLUMNSTORE INDEX cl_simple ON dbo.SimpleTable2
WITH (DROP_EXISTING = ON);
GO
C. Sortártáblák oszlopcentrikus indexké alakításakor nemclustered indexek kezelése
Ez a példa bemutatja, hogyan kezelhetők a nemclustered indexek, amikor oszlopcentrikus indexké alakít át egy sortártáblát. Az SQL Server 2016-tól (13.x) kezdődően nincs szükség speciális műveletre. Az SQL Server automatikusan definiálja és újraépíti a nemclustered indexeket az új, fürtözött oszlopcentrikus indexen.
Ha el szeretné dobni a nemclustered indexeket, használja a DROP INDEX utasítást az oszlopcentrikus index létrehozása előtt. A DROP EXISTING beállítás csak a konvertálni kívánt fürtözött indexet veti el. Nem veti el a nemclustered indexeket.
Az SQL Server 2012 -ben (11.x) és az SQL Server 2014-ben (12.x) nem hozható létre nemclustered index egy oszlopcentrikus indexen.
--Create the table for use with this example.
CREATE TABLE dbo.SimpleTable (
ProductKey [INT] NOT NULL,
OrderDateKey [INT] NOT NULL,
DueDateKey [INT] NOT NULL,
ShipDateKey [INT] NOT NULL);
GO
--Create two nonclustered indexes for use with this example
CREATE INDEX nc1_simple ON dbo.SimpleTable (OrderDateKey);
CREATE INDEX nc2_simple ON dbo.SimpleTable (DueDateKey);
GO
Csak az SQL Server 2012 (11.x) és az SQL Server 2014 (12.x) esetén kell elvetni a nemclustered indexeket az oszlopcentrikus index létrehozásához.
DROP INDEX dbo.SimpleTable.nc1_simple;
DROP INDEX dbo.SimpleTable.nc2_simple;
--Convert the rowstore table to a columnstore index.
CREATE CLUSTERED COLUMNSTORE INDEX cci_simple ON dbo.SimpleTable;
GO
D. Nagy ténytáblák átalakítása soráruházból oszloptárba
Ez a példa bemutatja, hogyan alakíthat át nagy ténytáblát sortártáblából oszlopcentrikus táblává.
Hozzon létre egy kis táblázatot, amelyet ebben a példában használhat.
--Create a rowstore table with a clustered index and a nonclustered index. CREATE TABLE dbo.MyFactTable ( ProductKey [INT] NOT NULL, OrderDateKey [INT] NOT NULL, DueDateKey [INT] NOT NULL, ShipDateKey [INT] NOT NULL INDEX IDX_CL_MyFactTable CLUSTERED ( ProductKey ) ); --Add a nonclustered index. CREATE INDEX my_index ON dbo.MyFactTable ( ProductKey, OrderDateKey );
Helyezze el az összes nemclustered indexet a sortártáblából. Előfordulhat, hogy később újra létre szeretné hozni az indexeket.
--Drop all nonclustered indexes DROP INDEX my_index ON dbo.MyFactTable;
A sortártáblát fürtözött oszlopcentrikus indexet tartalmazó oszlopcentrikus táblává alakíthatja.
Először keresse meg a meglévő fürtözött sortárindex nevét. Az 1. lépésben az index nevét a következőre
IDX_CL_MyFactTable
állítjuk be: . Ha az indexnév nincs megadva, automatikusan létrehozott egyedi indexnevet kapott. Az automatikusan létrehozott nevet a következő minta lekérdezéssel kérdezheti le:SELECT i.object_id, i.name, t.object_id, t.name FROM sys.indexes i INNER JOIN sys.tables t ON i.object_id = t.object_id WHERE i.type_desc = 'CLUSTERED' AND t.name = 'MyFactTable';
1. lehetőség: A meglévő fürtözött index
IDX_CL_MyFactTable
elvetése és oszlopcentrikussá alakításaMyFactTable
. Módosítsa az új fürtözött oszlopcentrikus index nevét.--Drop the clustered rowstore index. DROP INDEX [IDX_CL_MyFactTable] ON dbo.MyFactTable; GO --Create a new clustered columnstore index with the name MyCCI. CREATE CLUSTERED COLUMNSTORE INDEX IDX_CCL_MyFactTable ON dbo.MyFactTable; GO
2. lehetőség: Konvertálás oszlopcentrikussá, és használja újra a meglévő sortárfürt indexnevét.
--Create the clustered columnstore index, --replacing the existing rowstore clustered index of the same name CREATE CLUSTERED COLUMNSTORE INDEX [IDX_CL_MyFactTable] ON dbo.MyFactTable WITH (DROP_EXISTING = ON);
E. Oszlopcentrikus tábla átalakítása csoportosított indexet tartalmazó sortártáblává
Ha egy oszlopcentrikus táblát csoportosított indexet tartalmazó sortártáblává szeretne alakítani, használja a CREATE INDEX utasítást a DROP_EXISTING beállítással.
CREATE CLUSTERED INDEX [IDX_CL_MyFactTable]
ON dbo.[MyFactTable] ( ProductKey )
WITH ( DROP_EXISTING = ON );
F. Oszlopcentrikus tábla átalakítása sortár-halommá
Ha egy oszloptártáblát sortár-halommá szeretne alakítani, vesse el a fürtözött oszlopcentrikus indexet. Ez általában nem ajánlott, de lehetnek szűk felhasználási területei is. A halmokról további információt a Halmok (fürtözött indexek nélküli táblák) című témakörben talál.
DROP INDEX [IDX_CL_MyFactTable]
ON dbo.[MyFactTable];
G. Töredezettségmentesítés az oszlopcentrikus index átrendezésével
A fürtözött oszlopcentrikus index kétféleképpen tartható fenn. Az SQL Server 2016-tól kezdve (13.x) használja ALTER INDEX...REORGANIZE
a BUILD helyett. További információ: Columnstore index rowgroup. Az SQL Server korábbi verzióiban használhatja a FÜRTÖZÖTT OSZLOPCENTRIKUS INDEX LÉTREHOZÁSA lehetőséget DROP_EXISTING=BE vagy ALTER INDEX (Transact-SQL) és az ÚJRAÉPÍTÉS beállítással. Mindkét módszer ugyanazt az eredményt érte el.
Kezdje a fürtözött oszlopcentrikus index nevének meghatározásával a következőben MyFactTable
: .
SELECT i.object_id, i.name, t.object_id, t.name
FROM sys.indexes i
INNER JOIN sys.tables t on i.object_id = t.object_id
WHERE i.type_desc = 'CLUSTERED COLUMNSTORE'
AND t.name = 'MyFactTable';
Távolítsa el a töredezettségeket egy REORGANIZE művelet végrehajtásával az oszlopcentrikus indexen.
--Rebuild the entire index by using ALTER INDEX and the REBUILD option.
ALTER INDEX IDX_CL_MyFactTable
ON dbo.[MyFactTable]
REORGANIZE;
Példák nemclustered oszlopcentrikus indexekre
Egy. Oszlopcentrikus index létrehozása másodlagos indexként egy sortártáblán
Ez a példa létrehoz egy nemclustered oszlopcentrikus indexet egy sortártáblán. Ebben a helyzetben csak egy oszlopcentrikus index hozható létre. Az oszlopcentrikus index további tárterületet igényel, mert a sortártáblában lévő adatok másolatát tartalmazza. Ez a példa létrehoz egy egyszerű táblát és egy sortárba csoportosított indexet, majd bemutatja a nemclustered oszlopcentrikus indexek létrehozásának szintaxisát.
CREATE TABLE dbo.SimpleTable (
ProductKey [INT] NOT NULL,
OrderDateKey [INT] NOT NULL,
DueDateKey [INT] NOT NULL,
ShipDateKey [INT] NOT NULL);
GO
CREATE CLUSTERED INDEX cl_simple ON dbo.SimpleTable (ProductKey);
GO
CREATE NONCLUSTERED COLUMNSTORE INDEX csindx_simple
ON dbo.SimpleTable (OrderDateKey, DueDateKey, ShipDateKey);
GO
B. Alapszintű nemclustered oszlopcentrikus index létrehozása az összes beállítás használatával
Az alábbi példa azt mutatja be, hogyan hozhat létre nemclustered oszlopcentrikus indexet a DEFAULT fájlcsoportban, és a maximális párhuzamossági fokot (MAXDOP) 2-ként adja meg.
CREATE NONCLUSTERED COLUMNSTORE INDEX csindx_simple
ON SimpleTable (OrderDateKey, DueDateKey, ShipDateKey)
WITH (DROP_EXISTING = ON,
MAXDOP = 2)
ON "DEFAULT";
GO
C. Nemclustered columnstore index létrehozása szűrt predikátummal
Az alábbi példa egy szűrt, nemclustered oszlopcentrikus indexet hoz létre a Production.BillOfMaterials
AdventureWorks2022
mintaadatbázis tábláján. A szűrő predikátum olyan oszlopokat is tartalmazhat, amelyek nem kulcsoszlopok a szűrt indexben. A példában szereplő predikátum csak azokat a sorokat jelöli ki, ahol EndDate
nem NULL értékű.
IF EXISTS (SELECT name FROM sys.indexes
WHERE name = N'FIBillOfMaterialsWithEndDate'
AND object_id = OBJECT_ID(N'Production.BillOfMaterials'))
DROP INDEX FIBillOfMaterialsWithEndDate
ON Production.BillOfMaterials;
GO
CREATE NONCLUSTERED COLUMNSTORE INDEX "FIBillOfMaterialsWithEndDate"
ON Production.BillOfMaterials (ComponentID, StartDate)
WHERE EndDate IS NOT NULL;
D. Nemclustered columnstore index adatainak módosítása
A következőkre vonatkozik: SQL Server 2012 (11.x) és SQL Server 2014 (12.x).
Az SQL Server 2014 (12.x) és korábbi verzióiban, miután létrehozott egy nemclustered oszlopcentrikus indexet egy táblán, nem módosíthatja közvetlenül a táblában lévő adatokat. Az INSERT, UPDATE, DELETE vagy MERGE lekérdezés sikertelen, és hibaüzenetet ad vissza. Az alábbi lehetőségeket használhatja a táblázat adatainak hozzáadására vagy módosítására:
Tiltsa le vagy dobja el az oszlopcentrikus indexet. Ezután frissítheti a táblában lévő adatokat. Ha letiltja az oszlopcentrikus indexet, újraépítheti az oszlopcentrikus indexet az adatok frissítésekor. Például:
ALTER INDEX mycolumnstoreindex ON dbo.mytable DISABLE; -- update the data in mytable as necessary ALTER INDEX mycolumnstoreindex on dbo.mytable REBUILD;
Adatok betöltése olyan átmeneti táblába, amely nem rendelkezik oszlopcentrikus indexel. Oszlopcentrikus index létrehozása az előkészítési táblán. Állítsa át az előkészítési táblát a főtábla üres partíciójára.
A táblából az oszlopcentrikus indexet tartalmazó partíciót üres átmeneti táblává alakíthatja. Ha az előkészítési táblában oszlopcentrikus index található, tiltsa le az oszlopcentrikus indexet. Végezze el a frissítéseket. Hozza létre (vagy építse újra) az oszlopcentrikus indexet. Állítsa vissza az előkészítési táblát a főtábla (most üres) partíciójára.
Példák: Azure Synapse Analytics, Analytics Platform System (PDW)
Egy. Fürtözött index módosítása fürtözött oszlopcentrikus indexre
A FÜRTÖZÖTT OSZLOPCENTRIKUS INDEX LÉTREHOZÁSA utasítás DROP_EXISTING = BE paranccsal a következőt teheti:
Fürtözött index módosítása fürtözött oszlopcentrikus indexre.
Fürtözött oszlopcentrikus index újraépítése.
Ez a xDimProduct
példa egy csoportosított indexet tartalmazó sortártáblaként hozza létre a táblát. Ezután a példa a CREATE CLUSTERED COLUMNSTORE INDEX használatával módosítja a táblát egy sortártábláról oszlopcentrikus táblára.
-- Uses AdventureWorks
IF EXISTS (SELECT name FROM sys.tables
WHERE name = N'xDimProduct'
AND object_id = OBJECT_ID (N'xDimProduct'))
DROP TABLE xDimProduct;
--Create a distributed table with a clustered index.
CREATE TABLE xDimProduct (ProductKey, ProductAlternateKey, ProductSubcategoryKey)
WITH ( DISTRIBUTION = HASH(ProductKey),
CLUSTERED INDEX (ProductKey) )
AS SELECT ProductKey, ProductAlternateKey, ProductSubcategoryKey FROM DimProduct;
Keresse meg a rendszer metaadataiban automatikusan létrehozott fürtözött index nevét a rendszer metaadatai között.sys.indexes
Például:
SELECT i.object_id, i.name, t.object_id, t.name, i.type_desc
FROM sys.indexes i
INNER JOIN sys.tables t ON i.object_id = t.object_id
WHERE i.type_desc = 'CLUSTERED'
AND t.name = 'xdimProduct';
Most a következő lehetőségek közül választhat:
- Helyezze el a meglévő fürtözött oszlopcentrikus indexet egy automatikusan létrehozott névvel, majd hozzon létre egy új fürtözött oszlopcentrikus indexet egy felhasználó által definiált névvel.
- Helyezze el és cserélje le a meglévő indexet egy fürtözött oszlopcentrikus indexre, megtartva a rendszer által létrehozott nevet, például
ClusteredIndex_1bd8af8797f7453182903cc68df48541
.
Például:
--1. DROP the existing clustered columnstore index with an automatically-created name, for example:
DROP INDEX ClusteredIndex_1bd8af8797f7453182903cc68df48541 on xdimProduct;
GO
CREATE CLUSTERED COLUMNSTORE INDEX [<new_index_name>]
ON xdimProduct;
GO
--Or,
--2. Change the existing clustered index to a clustered columnstore index with the same name.
CREATE CLUSTERED COLUMNSTORE INDEX [ClusteredIndex_1bd8af8797f7453182903cc68df48541]
ON xdimProduct
WITH ( DROP_EXISTING = ON );
GO
B. Fürtözött oszlopcentrikus index újraépítése
Az előző példára építve ez a példa a CREATE CLUSTERED COLUMNSTORE INDEX parancsot használja a meglévő fürtözött oszlopcentrikus index, az úgynevezett cci_xDimProduct
újraépítéséhez.
--Rebuild the existing clustered columnstore index.
CREATE CLUSTERED COLUMNSTORE INDEX cci_xDimProduct
ON xdimProduct
WITH ( DROP_EXISTING = ON );
C. Fürtözött oszlopcentrikus index nevének módosítása
A fürtözött oszlopcentrikus index nevének módosításához vesse el a meglévő fürtözött oszlopcentrikus indexet, majd hozza létre újra az indexet egy új névvel.
Javasoljuk, hogy ezt a műveletet egy kis vagy üres táblára korlátozza. Hosszú időt vesz igénybe egy nagy, fürtözött oszlopcentrikus index elvetése és egy másik névvel történő újraépítés.
Ez a példa az cci_xDimProduct
előző példából származó fürtözött oszlopcentrikus indexre hivatkozik. Ez a példa elveti a cci_xDimProduct
fürtözött oszlopcentrikus indexet, majd újra létrehozza a fürtözött oszlopcentrikus indexet a névvel mycci_xDimProduct
.
--For illustration purposes, drop the clustered columnstore index.
--The table continues to be distributed, but changes to a heap.
DROP INDEX cci_xdimProduct ON xDimProduct;
--Create a clustered index with a new name, mycci_xDimProduct.
CREATE CLUSTERED COLUMNSTORE INDEX mycci_xDimProduct
ON xdimProduct
WITH ( DROP_EXISTING = OFF );
D. Oszlopcentrikus tábla átalakítása csoportosított indexet tartalmazó sortártáblává
Előfordulhat, hogy egy fürtözött oszlopcentrikus indexet szeretne elvetni, és létre szeretne hozni egy fürtözött indexet. Fürtözött oszlopcentrikus index elvetésekor a tábla sortár formátumra változik. Ez a példa egy oszlopcentrikus táblát egy azonos nevű csoportosított indexet tartalmazó sortártáblává alakít át. Egyik adat sem veszett el. Minden adat a sortártáblába kerül, és a felsorolt oszlopok lesznek a fürtözött index kulcsoszlopai.
--Drop the clustered columnstore index and create a clustered rowstore index.
--All of the columns are stored in the rowstore clustered index.
--The columns listed are the included columns in the index.
CREATE CLUSTERED INDEX cci_xDimProduct
ON xdimProduct (ProductKey, ProductAlternateKey, ProductSubcategoryKey, WeightUnitMeasureCode)
WITH ( DROP_EXISTING = ON);
E. Oszlopcentrikus tábla visszaalakulása sortár-halomra
A DROP INDEX használatával ejtse le a fürtözött oszlopcentrikus indexet, és alakítsa át a táblát sortár-halommá. Ez a példa sortár-halommá alakítja a cci_xDimProduct
táblát. A tábla továbbra is el lesz osztva, de halomként van tárolva.
--Drop the clustered columnstore index. The table continues to be distributed, but changes to a heap.
DROP INDEX cci_xdimProduct ON xdimProduct;
F. Rendezett fürtözött oszlopcentrikus index létrehozása index nélküli táblán
A rendezetlen oszlopcentrikus index alapértelmezés szerint az összes oszlopot lefedi anélkül, hogy oszloplistát kellene megadnia. A rendezett oszlopcentrikus index lehetővé teszi az oszlopok sorrendjének megadását. A listának nem kell minden oszlopot tartalmaznia.
További információ: A teljesítmény finomhangolása rendezett oszlopcentrikus indexekkel.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
ORDER (SHIPDATE);
G. Fürtözött oszlopcentrikus index átalakítása rendezett fürtözött oszlopcentrikus indexké
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
ORDER (SHIPDATE)
WITH (DROP_EXISTING = ON);
H. Oszlop hozzáadása egy rendezett fürtözött oszlopcentrikus index sorrendjéhez
Az oszlopcentrikus index oszlopainak sorrendjét megadhatja. Az eredeti rendezett, fürtözött oszlopcentrikus index csak az SHIPDATE
oszlopon lett rendezve. Az alábbi példa hozzáadja az PRODUCTKEY
oszlopot a rendeléshez. A rendezett oszloptárolós indexek elérhetőségéről további információért lásd a(z) Oszloptár indexek: Áttekintés.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
ORDER (SHIPDATE, PRODUCTKEY)
WITH (DROP_EXISTING = ON);
Én. A rendezett oszlopok sorrendjének módosítása
Az eredeti rendezett, fürtözött oszlopcentrikus index a következőre SHIPDATE
lett rendezve: . PRODUCTKEY
Az alábbi példa a rendezést a következőre PRODUCTKEY
módosítja: . SHIPDATE
A rendezett oszloptárolós indexek elérhetőségéről további információért lásd a(z) Oszloptár indexek: Áttekintés.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
ORDER (PRODUCTKEY,SHIPDATE)
WITH (DROP_EXISTING = ON);
J. Rendezett fürtözött oszlopcentrikus index létrehozása
Csoportosított oszlopcentrikus indexet rendezési kulcsokkal hozhat létre. Rendezett fürtözött oszlopcentrikus index létrehozásakor a lekérdezési tippet MAXDOP = 1
a rendezés maximális minőségére és a legrövidebb időtartamra kell alkalmaznia. A rendezett oszloptárolós indexek elérhetőségéről további információért lásd a(z) Oszloptár indexek: Áttekintés.
CREATE CLUSTERED COLUMNSTORE INDEX [OrderedCCI] ON dbo.FactResellerSalesPartCategoryFull
ORDER (EnglishProductSubcategoryName, EnglishProductName)
WITH (MAXDOP = 1, DROP_EXISTING = ON);