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: Az SQL Server 2022 (16.x) és újabb verziói
az Azure SQL Database
Azure SQL Managed Instance
SQL-adatbázist a Microsoft Fabricben
A rendezett oszlopcentrikus indexek gyorsabb teljesítményt nyújtanak, ha nagy mennyiségű, a lekérdezési predikátumnak nem megfelelő rendezett adatot kihagynak. Bár az adatok rendezett oszlopcentrikus indexbe való betöltése és a sorrend fenntartása az index újraépítése révén hosszabb időt vesz igénybe, mint a nem rendezett indexekben, az indexelt lekérdezések gyorsabban futhatnak a rendezett oszloptárolóval.
Amikor egy lekérdezés oszlopcentrikus indexet olvas be, az adatbázismotor ellenőrzi az egyes oszlopszegmensekben tárolt minimális és maximális értékeket. A folyamat kiküszöböli a lekérdezési predikátum határain kívül eső szegmenseket. Más szóval kihagyja ezeket a szegmenseket, amikor adatokat olvas lemezről vagy memóriából. A lekérdezés gyorsabban fejeződik be, ha az olvasandó szegmensek száma és teljes méretük jelentősen kisebb.
Bizonyos adatbetöltési minták esetén az oszlopcentrikus indexben lévő adatok implicit módon, a ORDER záradék megadása nélkül is rendezhetők. Ha például naponta történik adatbetöltés, akkor előfordulhat, hogy az adatokat egy load_date oszlop rendezi. Ebben az esetben a lekérdezési teljesítmény már kihasználhatja ezt az implicit sorrendet. Az oszlopcentrikus indexnek a load_date záradékban explicit módon megadott ORDER oszlop szerinti rendezése nem valószínű, hogy további teljesítményelőnyt biztosítana.
Az oszlopcentrikus indexek különböző SQL-platformokon és SQL Server-verziókban való rendelkezésre állását lásd: Rendezett oszlopcentrikus index rendelkezésre állása.
Az oszlopcentrikus indexek nemrég hozzáadott funkcióiról további információt Az oszlopcentrikus indexek újdonságaicímű témakörben talál.
Rendezett és nem rendezett oszlopalapú index
Egy oszlopcentrikus indexben az egyes sorcsoportok minden oszlopában lévő adatok külön szegmensbe lesznek tömörítve. Minden szegmens a minimális és maximális értékeket leíró metaadatokat tartalmaz, így a lekérdezés-végrehajtási folyamat kihagyhatja a lekérdezési predikátum határain kívül eső szegmenseket.
Ha egy oszloptárolós index nincs rendezve, az indexépítő nem rendezi az adatokat, mielőtt szegmensekbe tömörítené őket. Ez azt jelenti, hogy egymást átfedő értéktartományokkal rendelkező szegmensek fordulhatnak elő, így a lekérdezések további szegmenseket olvasnak be a szükséges adatok lekéréséhez. Ennek eredményeképpen a lekérdezések befejezése hosszabb időt vehet igénybe.
Ha rendezett oszlopcentrikus indexet hoz létre a ORDERCREATE COLUMNSTORE INDEX utasítás záradékának megadásával, az adatbázismotor az egyes rendelésoszlopok minden szegmensében rendezi az adatokat, mielőtt az indexszerkesztő szegmensekbe tömörítené az adatokat. A rendezett adatok esetén a szegmensek átfedése csökken vagy megszűnik, így a lekérdezések hatékonyabb szegmenseliszorítást és ezáltal gyorsabb teljesítményt használhatnak, mivel kevesebb szegmens és kevesebb adat olvasható.
A szegmensek átfedésének csökkentése és a lekérdezési teljesítmény javítása
Rendezett oszlopalapú index létrehozásakor az adatbázismotor a lehető legjobban rendezi az adatokat. A rendelkezésre álló memóriától, az adatmérettől, a párhuzamosság mértékétől, az index típusától (fürtözött vs. nem fürtözött) és az index build típusától (offline vs. online) függően egy oszlopstore index oszlopában a sorrend lehet teljes szegmensek átfedése nélkül, vagy részleges, bizonyos szegmensek átfedésével. Ha kevesebb egymást átfedő szegmens van, gyorsabban fut egy olyan lekérdezés, amely kihasználhatja az oszlopsorrend előnyeit.
Jótanács
Még ha az oszlopcentrikus index egy oszlopának sorrendje részleges is, a szegmensek továbbra is kiküszöbölhetők (kihagyhatók). A teljesítménybeli előnyök eléréséhez nincs szükség teljes megrendelésre, ha egy részleges megrendelés sok szegmens átfedését elkerüli.
Az alábbi táblázat az eredményként kapott rendeléstípust ismerteti a rendezett oszlopcentrikus index létrehozásakor vagy újraépítésekor, az index összeállítási beállításaitól függően.
| Előfeltételek | Rendelés típusa |
|---|---|
ONLINE = ON és MAXDOP = 1 |
Full |
ONLINE = OFF, MAXDOP = 1és a rendezendő adatok teljes mértékben illeszkednek a lekérdezés-munkaterület memóriájába |
Full |
| Minden más eset | Részleges |
Az első esetben, amikor mindkettő ONLINE = ON és MAXDOP = 1, a rendezést nem korlátozza a lekérdezési munkaterület memóriája, mert egy rendezett oszloptár index online buildje a tempdb adatbázist használja a memóriába nem férő adatok kiírására. Ez a megközelítés a további tempdb I/O miatt lassabbá teheti az indexkészítési folyamatot, és elegendő szabad helyet igényel a fájlban tempdb. Mivel azonban az index összeállítása online történik, a lekérdezések továbbra is használhatják a meglévő indexet az új rendezett index létrehozásakor.
Hasonlóképpen, a particionált oszlopraktár index offline újraépítésénél az újraépítés egyszerre csak egy partíción történik. Más partíciók továbbra is elérhetők maradnak a lekérdezésekhez.
Ha MAXDOP 1-nél nagyobb, a rendezett oszlopcentrikus indexek összeállításához használt szálak az adatok egy részhalmazán működnek, és helyileg rendezik őket. Nincs globális rendezés különböző szálak szerint rendezett adatok között. A párhuzamos szálak használata csökkentheti az index létrehozásának idejét, de több egymást átfedő szegmenst eredményez, mint egyetlen szál használata esetén.
Rendezett oszlopcentrikus indexeket csak bizonyos SQL-platformokon és SQL Server-verziókban hozhat létre vagy építhet újra újra online. További információkért tekintse meg a termékkiadások funkcióösszesítését.
Az SQL Serverben az online indexműveletek nem minden kiadásban érhetők el. További információ: Az SQL Server 2025 kiadásai és támogatott funkciói , valamint az indexműveletek online végrehajtása.
Bizonyos adattípusok és kódolások esetén a sys.column_store_segments rendszernézet segít megtalálni a szegmensek átfedéseinek számát. Az ezen a nézeten alapuló mintaszkript határozza meg az aktuális adatbázis összes oszlopindexének megfelelő oszlopainak rendelési minőségét.
Lekérdezési teljesítmény
A rendezett oszlopcentrikus index teljesítménynövekedése a lekérdezési mintáktól, az adatok méretétől, az átfedésben lévő szegmensek számától és a lekérdezés végrehajtásához rendelkezésre álló számítási erőforrásoktól függ.
A következő mintákkal rendelkező lekérdezések általában gyorsabban futnak rendezett oszlopcentrikus indexekkel:
- Egyenlőségi, egyenlőtlenségi vagy tartomány-predikátumokkal rendelkező lekérdezések.
- Olyan lekérdezések, amelyekben a predikátumoszlopok és a rendezett CCI-oszlopok megegyeznek.
Az alábbi példában a táblázat T1 egy fürtözött oszlopcentrikus indexet Col_Ctartalmaz , Col_Bés Col_A rendezett oszlopokat tartalmaz.
CREATE CLUSTERED COLUMNSTORE INDEX OrderedCCI
ON T1
ORDER (Col_C, Col_B, Col_A);
Az 1. lekérdezés a 2. és a 3. lekérdezésnél jobban élvezi a rendezett oszlopcentrikus index előnyeit, mivel az 1. lekérdezés a predikátum összes rendezett oszlopára hivatkozik.
-- query 1
SELECT *
FROM T1
WHERE Col_C = 'c'
AND Col_B = 'b'
AND Col_A = 'a';
-- query 2
SELECT *
FROM T1
WHERE Col_B = 'b'
AND Col_A = 'a';
-- query 3
SELECT *
FROM T1
WHERE Col_A = 'a'
AND Col_C = 'c';
Adatbetöltési teljesítmény
A rendezett oszlopcentrikus indexet tartalmazó táblákba való adatbetöltés teljesítménye hasonló a particionált táblákhoz. Az adatok betöltése hosszabb időt is igénybe vehet, mint egy nem rendezett oszlopcentrikus index esetén az adatrendező művelet miatt, de a lekérdezések később gyorsabban futhatnak.
Új adatok hozzáadása vagy meglévő adatok frissítése
A DML-kötegből vagy egy rendezett oszlopcentrikus indexet tartalmazó táblán végzett tömeges terhelési műveletből származó új adatok csak az adott kötegen belül lesznek rendezve. Nincs olyan globális rendezés, amely meglévő adatokat tartalmaz a táblában, mert az oszlopcentrikus index tömörített sorcsoportjai nem módosíthatók.
Az oszlopcentrikus index újraépítésével csökkentheti a szegmensek átfedését az új adatok beszúrása vagy a meglévő adatok frissítése után.
Examples
Rendezett oszlop-adattár index létrehozása
Csoportosított rendezett oszlop-tároló index
CREATE CLUSTERED COLUMNSTORE INDEX OCCI
ON dbo.Table1
ORDER(Column1, Column2);
Nem klaszterezett rendezett oszlophalmaz index:
CREATE NONCLUSTERED COLUMNSTORE INDEX ONCCI
ON dbo.Table1(Column1, Column2, Column3)
ORDER(Column1, Column2);
Rendezett oszlopok és sorszámok ellenőrzése
SELECT OBJECT_SCHEMA_NAME(c.object_id) AS schema_name,
OBJECT_NAME(c.object_id) AS table_name,
c.name AS column_name,
i.column_store_order_ordinal
FROM sys.index_columns AS i
INNER JOIN sys.columns AS c
ON i.object_id = c.object_id
AND c.column_id = i.column_id
WHERE column_store_order_ordinal > 0;
Rendelésoszlopok hozzáadása vagy eltávolítása, valamint meglévő rendezett oszlopcentrikus index újraépítése
Csoportosított rendezett oszlop-tároló index
CREATE CLUSTERED COLUMNSTORE INDEX OCCI
ON dbo.Table1
ORDER(Column1, Column2)
WITH (DROP_EXISTING = ON);
Nem klaszterezett rendezett oszlophalmaz index:
CREATE NONCLUSTERED COLUMNSTORE INDEX ONCCI
ON dbo.Table1(Column1, Column2, Column3)
ORDER(Column1, Column2)
WITH (DROP_EXISTING = ON);
Teljes sorrendű rendezett fürtözött oszlopalapú index online létrehozása egy halmaztáblán
CREATE CLUSTERED COLUMNSTORE INDEX OCCI
ON dbo.Table1
ORDER(Column1)
WITH (ONLINE = ON, MAXDOP = 1);
Rendezett fürtözött oszlopcentrikus index online újraépítése teljes megrendeléssel
CREATE CLUSTERED COLUMNSTORE INDEX OCCI
ON dbo.Table1
ORDER(Column1)
WITH (DROP_EXISTING = ON, ONLINE = ON, MAXDOP = 1);
Kapcsolódó tartalom
- oszloptárolós index tervezési irányelvei
- oszlopcentrikus indexek – adatbetöltési útmutató
- Ismerkedjen meg az oszlopalapú indexekkel a valós idejű üzemeltetési analitikához
- Oszlopbolt indexek adattárházakban
- 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
- oszlopalapú indexarchitektúra
- INDEX LÉTREHOZÁSA (Transact-SQL)
- ALTER INDEX (Transact-SQL)